aa

/**
 * @Description: js ajax无刷新分页框架载入
 * @Author:	Hongcun
 * @Version: 1.0
 * @Date: 2012/11/03
 * #Notice: Require Jquery.js, Jquery.pagnation.js
 */
 ;(function($, Mc){
	 if(!Mc.Opagnation) window.Mc = Mc;
	 Mc.Opagnation = function(config){
		 var defaults = {
			dataSource: '', //必须
			params: {}, //请求参数
			requestType: 'GET', //请求类型
			dataType: 'json',
			contentContainer: '', //内容显示区域ID|必须
			pageContainer: '', //分页容器ID|必须
			recordsTotal: 0, //记录数|必须
			perPage: 10, //每页显示记录数
			showPages: 8, //显示几个分页标签
			prevText: '上一页', //上一页按钮
			nextText: '下一页', //下一页按钮
			edgePages: 2, //边缘显示页面数目
			ellipseText: '...', //省略页数处显示
			prev_show_always: true, //前一页一直显示
			next_show_always:true, //后一页一直显示
			link_to: 'javascript:;', //链接
			renderer: false //重载内容输出方式
		 };
		 if(!$.isPlainObject(config)){
			 Mc.debug && Mc.debug('Mc.Opagnation Params Error!');
			 this.config = defaults;
		 }else{
			this.config = $.extend(defaults, config); 
		 }
		 this.init();
	 }
 
	 Mc.Opagnation.prototype =(function($){
		 /*定义私有属性*/
		 var serverData = ''; //服务器返回的数据
		 //定义私有方法
		  var showpages = function(){
			 if(this.config.pageContainer){
				 var self = this;
				$('#'+self.config.pageContainer).pagination(self.config.recordsTotal,{
					prev_text: self.config.prevText,
					next_text: self.config.nextText,
					num_display_entries: self.config.showPages,
					callback: function(page){
						self.setParam({page: page+1});
						request.call(self);
					}
				});	 
			 }
		 };
		 var request = function(){
			 var self = this;
			 $.ajax({
				'url' : self.config.dataSource,
				'context': document.getElementById(self.config.contentContainer),
				'datatype': self.config.datatype,
				'type': self.config.requestType,
				'data': self.config.params,
				'success':function(data){
					serverData = data; //缓存服务器数据,以备换样式显示,只需要重写对象render就好
					render.call(self, data);
				},
				'error': function(XMLHttpRequest, textStatus, errorThrown){
					self.error(request, textStatus);
				}
			});
		 };
		 
		 //当从服务器请求成功之后,会传入serverData
		var render = function(data){
			if(this.config.renderer){
				this.config.renderer.call(this, data); 
			}else{
				$('#'+this.config.contentContainner).html(data);
			}
		};
		 //Pagenation继承原型
		 return {
			 init: function(){
				showpages.call(this); 
			 },
			 //参数为{page:1}这样的对象
			 setParam: function(obj){
				 return $.isPlainObject(obj) ? $.extend(this.config.params, obj) : false; 
			 },
			 deleteParam: function(key){
				if(typeof this.config.params[key] != undefined)this.config.params[key] = undefined; 
				return true;
			 },
			 //重新加载服务器数据
			 reload: function(){
				 request.call(this);
			 },
			 //重写renderer,刷新容器页面
			 refresh: function(){
					render.call(this); 
			 },
			 //整页ajax刷新,可能涉及页签与记录的显示
			 reloadall: function(newconfig){
				 //备份源对象的config
				 //合并配置, 重新生成对象
				 var _config = this.config;
				 this.config = $.extend(_config, newconfig);
				 this.init();
				 
			 },
			 //当服务器无响应时
			 error: function(request, textStatus){
				 alert(textStatus);
			 }
	 };
	})($);
})($, Mc||{});

 

posted @ 2012-11-03 19:03  Red Candle  阅读(164)  评论(0编辑  收藏  举报