Example #1
0
		buildTemplate: function(config){
		    /*
    <div component="$UI/system/components/justep/picker/popPicker" class="x-popPicker"
      xid="popPicker" dismissible="true"> 
      <div class="x-popPicker-overlay" xid="div4"/>  
      <div class="x-popPicker-content"> 
        <div class="x-poppicker-header"> 
          <button class="btn btn-default x-btn-ok">确定 </button>
        </div>  
      </div> 
    </div>
			*/
			if(!config.xid) config.xid = justep.UUID.createUUID();
			var ret = $('<div component="'+url+'" class="'+(config['class']||this.baseCls)+'">'
			    	+'<div class="'+this.overlayCls+'"/>'
			    	+'<div class="'+this.contentCls+'">'
			    	+'<div class="'+this.headerCls+'">' 
			        +'  <button class="btn btn-default x-btn-ok">'+justep.Message.getMessage(justep.Message.JUSTEP231079)+' </button>'
			        +'</div>'  
			    	+'</div>'
					+'</div>');
			if(config.xid) ret.attr('xid', config.xid);
			if(config.style) ret.attr('style', config.style);
			return ret;
        },
Example #2
0
				constructor : function(options) {
					this.labelColumn = null;
					this.rootLabel = justep.Message.getMessage(justep.Message.JUSTEP231085);
					this.contexts = {};
					this.context = Bind.observable({
						pageIndex : -1,
						row : null,
						datas : null
					});
					this.callParent(options);
				},
Example #3
0
		_createTitle: function(){
			this.getContent$().append(
				    '<div class="x-poppicker-title">'+ 
				    '    <h5 class="x-year">'+justep.Message.getMessage(justep.Message.JUSTEP231504)+'</h5>'+  
				    '    <h5 class="x-month">'+justep.Message.getMessage(justep.Message.JUSTEP231502)+'</h5>'+  
				    '    <h5 class="x-day">'+justep.Message.getMessage(justep.Message.JUSTEP231503)+'</h5>'+  
				    '    <h5 class="x-hour">'+justep.Message.getMessage(justep.Message.JUSTEP231505)+'</h5>'+  
				    '    <h5 class="x-minute">'+justep.Message.getMessage(justep.Message.JUSTEP231506)+'</h5>'+  
				    '    <h5 class="x-second">'+justep.Message.getMessage(justep.Message.JUSTEP231507)+'</h5>'+ 
				    '</div>' 
			);
		},
Example #4
0
define(function(require) {
	var $ = require("jquery");
	var justep = require('$UI/system/lib/justep');
	var Data = require('$UI/system/components/justep/data/data');
	var url = require.normalizeName("./dataOperation");
	var ComponentConfig = require("./dataOperation.config");

	require('$UI/system/resources/system.res');

	var DataOperation = justep.ModelComponent.extend({
		constructor : function(model,xid) {
			this.callParent();
			this._init(model,xid);
		},
		_init : function(model,xid){
			this.setModel(model);
			model.registerComponent(xid, this);
			model.resolvedComponent(xid);
		},
		getConfig : function() {
			return ComponentConfig;
		},
		setValue: function(dataXid,col,value,row){
			var model = this.getModel();
			var data = typeof(dataXid)==='string'?model.comp(dataXid):dataXid;
			if(data instanceof Data){
				data.setValue(col,value,row);
			}else{
				var msg = new justep.Message(justep.Message.JUSTEP231002, dataXid);//data[{0}]不存在!
				throw justep.Error.create(msg);
			}
		},
		allSetValue: function(dataXid,col,value){
			var model = this.getModel();
			var data = typeof(dataXid)==='string'?model.comp(dataXid):dataXid;
			if(data instanceof Data){
				data.each(function(param){
					param.row.val(col,value);
				});
			}else{
				var msg = new justep.Message(justep.Message.JUSTEP231002, dataXid);//data[{0}]不存在!
				throw justep.Error.create(msg);
			}
		},
		refreshByGET: function(url,sync,event){
			var compData = event.source;
			if(compData instanceof Data){
				var deferred = $.Deferred();
				event.promise = deferred.promise();
				$.ajax({
					type: "GET",
					url: url,
					dataType: 'json',
					async: !sync,//使用同步方式,目前data组件有同步依赖
					success: function(data){
						compData.loadData(data);//将返回的数据加载到data组件
						deferred.resolve();
					},
					error: function(){
						deferred.reject();
						var msg = new justep.Message(justep.Message.JUSTEP231142, url);//"url["+url+"]加载数据失败"
						throw justep.Error.create(msg);
					}
				});
			}
		}
	});

	// 操作
	justep.Component.addOperations(DataOperation, {
		'setValue' : {
			label : justep.Message.getMessage(justep.Message.JUSTEP231134),//'data赋值'
			argsDef : [ {
				name : 'data',
				displayName : justep.Message.getMessage(justep.Message.JUSTEP231137),//'data组件'
				required : true
			},{
				name : 'col',
				displayName : justep.Message.getMessage(justep.Message.JUSTEP231139),//'列'
				required : true
			},{
				name : 'value',
				displayName : justep.Message.getMessage(justep.Message.JUSTEP231140),//'值'
				required : true
			},{
				name : 'row',
				displayName : justep.Message.getMessage(justep.Message.JUSTEP231138),//'行,缺省当前行'
			} ],
			method : function(args) {				
				return this.owner.setValue(args.data,args.col,args.value,args.row);
			}
		},
		'allSetValue' : {
			label : justep.Message.getMessage(justep.Message.JUSTEP231135),//'data所有行赋值'
			argsDef : [ {
				name : 'data',
				displayName : justep.Message.getMessage(justep.Message.JUSTEP231137),//'data组件'
				required : true
			},{
				name : 'col',
				displayName : justep.Message.getMessage(justep.Message.JUSTEP231139),//'列'
				required : true
			},{
				name : 'value',
				displayName : justep.Message.getMessage(justep.Message.JUSTEP231140),//'值'
				required : true
			} ],
			method : function(args) {
				return this.owner.allSetValue(args.data,args.col,args.value);
			}
		},
		'refreshByGET' : {
			label : justep.Message.getMessage(justep.Message.JUSTEP231136),//'get请求'
			argsDef : [ {
				name : 'url',
				displayName : 'url',
				required : true
			},{
				name : 'sync',
				displayName : justep.Message.getMessage(justep.Message.JUSTEP231141),//'同步请求,默认异步'
			}],
			method : function(args,ctx) {
				return this.owner.refreshByGET(args.url,args.sync,ctx.$event);
			}
		}
	});

	justep.Component.register(url, DataOperation);
	return DataOperation;
});
Example #5
0
define(function(require) {
	require("$UI/system/components/justep/common/res");
	//require("css!./css/jquery.dataTables").load();
	require("css!./css/dataTables.bootstrap").load();
	require("css!./css/dataTables.responsive").load();

	var $ = require("jquery");
	var justep = require('$UI/system/lib/justep');
	var Data = require("$UI/system/components/justep/data/data");

	// 引入jqQrid
	require("./js/jquery.dataTables");
	require("./js/dataTables.bootstrap");
	require("./js/dataTables.responsive");

	var url = require.normalizeName("./dataTables");
	var ComponentConfig = require("./dataTables.config");

	var language = {
        "oPaginate": {
            /*
             * 默认值为First
             * 当使用全数字类型的分页组件的时候,到第一页按钮上的文字
             */
            "sFirst": '<<',//justep.Message.getMessage(justep.Message.JUSTEP231550),//"第一页",
            /*
             * 默认值为Last
             * 当使用全数字类型的分页组件的时候,到最后一页按钮上的文字
             */
            "sLast": '>>',//justep.Message.getMessage(justep.Message.JUSTEP231551),//"最后页",
            /*
             * 默认值为Next
             * 当使用全数字类型的分页组件的时候,到下一页按钮上的文字
             */
            "sNext": '>',//justep.Message.getMessage(justep.Message.JUSTEP231552),//"下一页",
            /*
             * 默认值为Previous
             * 当使用全数字类型的分页组件的时候,到前一页按钮上的文字
             */
            "sPrevious": '<',//justep.Message.getMessage(justep.Message.JUSTEP231553),//"前一页"
        },
        /*
         * 默认值activate to sort column ascending为
         * 当表格中没有数据(无视因为过滤导致的没有数据)时,该字符串年优先与sZeroRecords显示
         * 注意这是个可选参数,如果没有指定,sZeroRecrods会被使用(既不是默认值也不是给定的值)
         */
        "sEmptyTable": justep.Message.getMessage(justep.Message.JUSTEP231554),//"没有数据",
        /*
         * 默认值为Showing _START_ to _END_ of _TOTAL_ entries 
         * 该属性给终端用户提供当前页面的展示信息,字符串中的变量会随着表格的更新被动态替换,而且可以被任意移动和删除
         */
        "sInfo": justep.Message.getMessage(justep.Message.JUSTEP231555),//"当前显示_START_-_END_条,共_TOTAL_条",
        /*
         * 默认值为Showing 0 to 0 of 0 entries 
         * 当表格中没有数据时展示的表格信息,通常情况下格式会符合sInfo的格式
         */
        "sInfoEmpty": '',//justep.Message.getMessage(justep.Message.JUSTEP231556),//"没有数据",
        /*
         * 默认值为(filtered from _MAX_ total entries) 
         * 当用户过滤表格中的信息的时候,该字符串会被附加到信息字符串的后面,从而给出过滤器强度的直观概念
         */
        "sInfoFiltered": "",
        /*
         * 默认值为空字符串
         * 使用该属性可以很方便的向表格信息字符串中添加额外的信息,被添加的信息在任何时候都会被附加到表格信息组件的后面
         * sInfoEmpty和sInfoFiltered可以以任何被使用的方式进行结合
         */
        "sInfoPostFix": "",
        /*
         * 默认值为','
         * DataTable有内建的格式化数字的工具,可以用来格式化表格信息中较大的数字
         * 默认情况下会自动调用,可以使用该选项来自定义分割的字符 
         */
        "sInfoThousands": "'",
        /*
         * 默认值为Show _MENU_ entries 
         * 描述当分页组件的下拉菜单的选项被改变的时候发生的动作,'_MENU_'变量会被替换为默认的10,25,50,100
         * 如果需要的话可以被自定义的下拉组件替换
         */
        "sLengthMenu": justep.Message.getMessage(justep.Message.JUSTEP231557),//"显示_MENU_条",
        /*
         * 默认值为Loading...
         * 当使用Ajax数据源和表格在第一次被加载搜集数据的时候显示的字符串,该信息在一个空行显示
         * 向终端用户指明数据正在被加载,注意该参数在从服务器加载的时候无效,只有Ajax和客户端处理的时候有效
         */
        "sLoadingRecords": justep.Message.getMessage(justep.Message.JUSTEP231558),//"请等待数据加载中...",
        /*
         * 默认值为Processing...
         * 当表格处理用户动作(例如排序或者类似行为)的时候显示的字符串
         */
        "sProcessing": justep.Message.getMessage(justep.Message.JUSTEP231559),//"处理中...",
        /*
         * 默认为Search:
         * 描述用户在输入框输入过滤条件时的动作,变量'_INPUT_',如果用在字符串中
         * DataTable会使用用户输入的过滤条件替换_INPUT_为HTML文本组件,从而可以支配它(即用户输入的过滤条件)出现在信息字符串中的位置 
         * 如果变量没有指定,用户输入会自动添加到字符串后面
         */
        "sSearch": justep.Message.getMessage(justep.Message.JUSTEP231560),//"查询: _INPUT_",
        /*
         * 默认值为No matching records found
         * 当对数据进行过滤操作后,如果没有要显示的数据,会在表格记录中显示该字符串
         * sEmptyTable只在表格中没有数据的时候显示,忽略过滤操作
         */
        "sZeroRecords": justep.Message.getMessage(justep.Message.JUSTEP231561)//"没有数据"
    };

	var processDom = function(cfg,comp){
		var data = comp.getData();
		var type = cfg.layout;
		if('t'===type){//只有表格
			cfg.dom = "tr";
			if(data)cfg.pageLength = data.limit;
			cfg.paging = false;
		}else if('tlip'===type){//表格+分页长度+信息+分页
			cfg.dom = "tr"
				+"<'container-fluid'<'row'<'col-sm-3'l><'col-sm-3'i><'col-sm-6'p>>>";
		}else if('ptp'===type){//分页+表格+分页
			cfg.dom = "ptrp";
			if(data)cfg.pageLength = data.limit;
		}
	};
	
	var processOrder = function(data, settings){
		//aaSorting
		var orders = [], tempOrders = settings.tempOrders||[], isChanged = false, order;
		if($.isArray(settings.aaSorting) && settings.aaSorting.length>0){
			data.clearOrderBy();
			var aaSorting = settings.aaSorting, colSorting, colDef, o;
			for(var i=0;i<aaSorting.length;i++){
				colSorting = aaSorting[i];
				if(colSorting.length<2) continue;
				colDef = settings.aoColumns[colSorting[0]];
				order = 'asc'===colSorting[1]?1:0;
				data.setOrderBy(colDef.sName,order);
				o = {};
				o[colDef.sName] = order;
				orders.push(o);
				if(tempOrders.length<=i) isChanged = true;
				if(!isChanged){
					isChanged = tempOrders[i][colDef.sName] !== o[colDef.sName];
				}
			}
		}
		settings.tempOrders = orders;
		return isChanged;
	};
	
	var valToString = function(v, colDef){
		if(v instanceof Data.ErrorValue) v = v.value;
		if(v===null || v===undefined) return '';
		if(colDef.format && ('DateTime' === colDef.dataType
				||'Date' === colDef.dataType
				||'Time' === colDef.dataType))
			return justep.Date.toString(v, colDef.format);
		else return v;
	};
	
	var colVal = function(source, type, val, meta){
		var colDef = meta.settings.aoColumns[meta.col];
		if (type === 'set') {
			source.val(colDef.sName,val);
			return;
		} else if (type === 'display') {
			return valToString(source.val(colDef.sName), colDef);
		} else if (type === 'filter') {
			return source.val(colDef.sName)||"";
		}
		return source.val(colDef.sName)||"";
	};

	var DataTables = justep.ViewComponent.extend({
		getConfig : function() {
			return ComponentConfig;
		},
		// 构造函数
		constructor : function(options) {
			this._eventHandles = {};
			this.multiSelect = false;
			this.showRowNumber = false;
			this.data = null;
			this._lastsel = null;
			this._disON = false;
			this.rowActiveClass = '';
			this.rowAttr = null;
			this.useFooter = false;
			this.callParent(options);
		},
		dispose : function() {
			this._bindEvent(false);
			this.callParent();
		},
		buildTemplate : function(config) {
			this._cfg = config || {};
			this.data = this._cfg.data;
			if(!this._cfg.xid) this._cfg.xid=justep.UUID.createUUID();
			var str = '<table xid="'+this._cfg.xid+'" component="'+url+'"'
						+(this._cfg['style']?(' style="'+this._cfg['style']+'"'):'')
						+(this._cfg['class']?(' class="'+this._cfg['class']+'"'):'')
						+'>';
			if(this._cfg.useFooter===true){
				var tf = '<tfoot><tr>';
				var size = $.isArray(this._cfg.columns)?this._cfg.columns.length:0;
				if(this._cfg.multiSelect) size++;
				if(this._cfg.showRowNumber) size++;
				for(var i=0;i<size;i++){
					tf += '<th/>';
				}
				tf += '</tr></tfoot>';
				str += tf;
			}
			str += '</table>';
			return $(str);
		},
		
		// 初始化
		init : function(value, bindingContext) {
			this.callParent(value, bindingContext);
			var cfg = this._processCfg();
			this.fireEvent('onBeforeInit',{source:this,settings:cfg});
			this.$domNode.dataTable(cfg);
			this._bindEvent();
			this.fireEvent('onInit', {source:this});
			this._processFooter();
		},

		_processCfg : function(){
			var self = this;
			var data = this.getData();
			var cfg = $.extend({
				"oLanguage": language,
				"order": [],
				"layout": 't',
				"lengthMenu": [10,20,50,100],
				"bProcessing" : true,
				"bServerSide" : true,
				"responsive" : false,
				"sAjaxSource" : "data.json",
				"sAjaxDataProp": "data",
				"footerCallback": function(tfoot, aoData, start, end, display){
					self.fireEvent('onFooterRender', {
						source:self,
						tfoot:tfoot, 
						data:data, 
						start:start, 
						end:end, 
						display:display
						});
				},
				"headerCallback": function(thead, aoData, start, end, display){
					self.fireEvent('onHeaderRender', {
						source:self,
						thead:thead, 
						data:data, 
						start:start, 
						end:end, 
						display:display
						});
				},
				"createdRow": function(tr, row){
					if(self.rowAttr){
						if(!self._rowAttrExpr) self._rowAttrExpr = new justep.Express(self.rowAttr);
						var ctx = justep.Bind.contextFor(self.domNode);
						ctx.$row = row;
						var attrObj = justep.Express.eval(self._rowAttrExpr, ctx.$object, ctx);
						delete ctx.$row;
						if(!$.isEmptyObject(attrObj)) {
							if (attrObj.hasOwnProperty("style")) {
								var style = $(tr).attr('style');
								$(tr).attr('style',style?(style+attrObj.style):attrObj.style);
								delete attrObj.style;
							}
							if (attrObj.hasOwnProperty("class")) {
								$(tr).addClass(attrObj['class']);
								delete attrObj['class'];
							}
							// dot't allow to change role attribute
							try { delete attrObj.role; } catch(ra){}
							for (var attrName in attrObj) {
								if (attrObj.hasOwnProperty(attrName)) {
									$(tr).attr(attrName,attrObj[attrName]);
								}
							}
						}
					}
				},
				"fnServerData" : function(sSource, aoData, fnCallback, settings){
					if(data){
						var recodeCount = data.getTotal(),dataOffset = data.getOffset();
						{
							//没有内部分页使用外部分页,同步data的limit
							if(!settings.bPaginate) settings._iDisplayLength = data.limit;
							//aaSorting排序
							var _orderChanged = processOrder(data, settings);
							//oPreviousSearch.sSearch,bCaseInsensitive,bSmart过滤查询
							if(_orderChanged || (data.isLoaded() && dataOffset)){//判断数据没有刷新过,只是新增
								if(_orderChanged || data.limit!==settings._iDisplayLength){//分页显示不同重新刷新
									self._disON = true;
									try{
										data.refreshData({limit:settings._iDisplayLength});
									}finally{
										self._disON = false;
									}
									settings._iDisplayStart = 0;
								}
								if(data.limit>0 && settings.bPaginate){
									var dataPageIndex = Math.floor(dataOffset/data.limit);
									var tablePageIndex = Math.floor(settings._iDisplayStart/settings._iDisplayLength)+1;
									if(dataPageIndex!==tablePageIndex){
										self._disON = true;
										try{
											data.loadPageData(tablePageIndex);
										}finally{
											self._disON = false;
										}
									}
								}
							}else if(!settings.bPaginate) data.limit = settings._iDisplayLength;
						}
						fnCallback({data:data.datas.get().slice(0),recordsTotal:recodeCount,recordsFiltered:recodeCount});
					}else fnCallback({data:[],recordsTotal:0,recordsFiltered:0});
					if(data){
						self.setSelection(data.getCurrentRow(true));
					}
					self.fireEvent('onLoaded', {source:self});
				 }
			},this._cfg||this.$domNode.data('config'));
			//处理展示模板
			processDom(cfg,this);
			//处理自适应宽度
			if(cfg.flexibleWidth){
				this.$domNode.attr('width','100%').css('width','100%');
			}
			//处理自定义长度菜单
			if('string'===typeof(cfg.lengthMenu)){
				var lengthMenu = cfg.lengthMenu, s, sl, len1, len2,
				lengthMenuDefs1 = [], lengthMenuDefs2 = [];
				lengthMenu = lengthMenu.split(',');
				for(var i=0;i<lengthMenu.length;i++){
					s = lengthMenu[i];
					sl = s.split(':');
					if(sl.length=1){
						len1 = parseInt(s,10);
						lengthMenuDefs1.push(len1);
						lengthMenuDefs2.push(len1);
					}else if(sl.length>1){
						len1 = parseInt(sl[0],10);
						len2 = parseInt(sl[1],10);
						lengthMenuDefs1.push(len1);
						lengthMenuDefs2.push(len2);
					}
				}
				if(lengthMenuDefs1.length>0)
					cfg.lengthMenu = [lengthMenuDefs1,lengthMenuDefs2];
			}
			this._processColCfg(cfg);
			if(cfg.data) delete cfg.data;
			return cfg;
		},
		_processFooter: function(){
			if(this.useFooter){
				var $table = this.dataTableApi();
				var colDefs = $table.settings()[0].aoColumns;
				var self = this, footerData = {};
				$.each(colDefs,function(i,v){
					if(v.footerData){
						if(!v._footerDataExpr) v._footerDataExpr = new justep.Express(v.footerData);
						var ctx = justep.Bind.contextFor(self.domNode);
						ctx.$data = self.getData();
						footerData[v.sName] = justep.Express.eval(v._footerDataExpr, ctx.$object, ctx);
						delete ctx.$data;
					}
				});
				if(!$.isEmptyObject(footerData)) this.setFooterData(footerData);
			}
		},
		_processColCfg : function(cfg){
			var indexs = [], self = this,
				multiSelect = this.multiSelect,
				showRowNumber = this.showRowNumber,
				data = this.getData(), 
				defCols = data?data.defCols:null;
			if(multiSelect){
				cfg.columns.splice(0,0,{
	                "title": '<input type="checkbox">',
					"class":          'dataTables-cb',
	                "orderable":      false,
	                "data":           null,
	                "width":	38,
	                "defaultContent": '<input type="checkbox">'
	            });
			}
			if(showRowNumber){
				cfg.columns.splice(0,0,{
	                "title": '',
					"class":          'dataTables-num',
	                "orderable":      false,
	                "data":           null,
	                "width":	38,
	                "defaultContent": '1'
	            });
			}
			$.each(cfg.columns,function(i,v){
				if((0===i && (multiSelect || showRowNumber)) || (1===i && multiSelect && showRowNumber)) return;
				indexs.push(i);
				var dcol = defCols?defCols[v.sName]:null;
				if(undefined===v.title){
					if(dcol && dcol.label)
						v.title = dcol.label;
					else v.title = v.sName;
				}
				if(dcol && dcol.type)
					v.dataType = dcol.type;
			});
			if(!$.isArray(cfg["columnDefs"])) cfg["columnDefs"] = [];
			cfg["columnDefs"].push({
				aTargets:indexs,
				mDataProp:colVal,
				render: function(val, type, row, meta) {
					var colDef = meta.settings.aoColumns[meta.col];
					//row, colVal, html, colName
					var evtData = {
							source:self,
							colVal: val,
							html:val,
							row: row,
							rowID: row?row.getID():null,
							colName: colDef.sName
							};
					self.fireEvent('onCellRender', evtData);
	                return evtData.html;
	            }});
			if(showRowNumber){
				cfg["columnDefs"].push({
					aTargets:0,
					render: function(val, type, row, meta) {
						//row, colVal, html, colName
						var data = row?row.data:null,v = '';
						if(data){
							var offset = data.limit!==-1?data.getOffset()-data.limit:0;
							v = data.getRowIndex(row)+1+offset;
						}
						var evtData = {
								source:self,
								colVal: v,
								html:v,
								row: row,
								rowID: row?row.getID():null,
								colName: '$rowNumber'
								};
						self.fireEvent('onCellRender', evtData);
		                return evtData.html;
		            }});
			}
		},
		_bindEvent : function(on){
			on = on!==false;
			var data = this.getData();
			var api = this.dataTableApi();
			var settings = api.settings()[0];
			var self = this;
			var fn = on?'on':'off';
			this.$domNode[fn]('click', 'tbody>tr', function(evt){
				var row = api.row(this).data();
				self.setSelection(row);
				var evtData = {
						source : self,
						domEvent: evt,
						row: row,
						rowID: row?row.getID():null
					};					
				self.fireEvent('onRowClick', evtData);
		    });
			this.$domNode[fn]('dblclick', 'tbody>tr', function(evt){
				var evtData = {
						source : self,
						domEvent: evt,
						row: api.row(this).data()
					};					
				evtData.rowID = evtData.row?evtData.row.getID():null;
				self.fireEvent('onRowDblClick', evtData);
			});
			//多选支持
			if(this.multiSelect){
				this.$domNode.closest('.dataTables_wrapper').find('thead:first')[fn]('click', 'th.dataTables-cb input', function(evt){
					self.setAllRowChecked(this.checked);
					if(self.hasListener('onRowCheckedAll')){
						self.fireEvent('onRowCheckedAll', {source:self,checked:this.checked});
					}
				});
				this.$domNode.find('tbody')[fn]('click', 'td.dataTables-cb input', function(evt){
					var input = evt.target;
					var tr = $(input).closest("tr");
					var evtData;
					if(self.hasListener('onRowCheck')){
						//多选勾选前事件,可以使用cancel取消
						evtData = {
								source:self,
								row: api.row(tr).data(),
								checked:input.checked,
								cancel:false
						};
						evtData.rowID = evtData.row.getID();
						self.fireEvent('onRowCheck', evtData);
						if(evtData.cancel){
							input.checked = !input.checked;
							return;
						}
					}
					if(self.hasListener('onRowChecked')){
						//多选勾选事件
						evtData = {source:self,row:api.row(tr).data(),checked:input.checked};
						evtData.rowID = evtData.row.getID();
						self.fireEvent('onRowChecked', evtData);
					}
				});
			}
			if(data){
				this._eventHandles['__data_index_changed__'] = function(event){
					if(self._lastsel!==event.row) self.setSelection(event.row);
				}; 
				data[fn](Data.EVENT_INDEX_CHANGED,this._eventHandles['__data_index_changed__']);
				this._eventHandles['__data_value_changed__'] = function(event){
					var cell = self.getCell(event.row, event.col);
					if(cell) cell.invalidate();
					self._processFooter();
				}; 
				data[fn](Data.EVENT_VALUE_CHANGED, this._eventHandles['__data_value_changed__']);
				this._eventHandles['__data_change__'] = function(event){
					var i,rows;
					if(!self._disON && event.selfChanged
							&& (event.type === 'clear'
								|| event.type === 'refresh'
									|| event.type === 'exchangeRow'
									|| event.type === 'delete'
										|| event.type === 'new'
											|| event.type === 'slaveDataChanged')){
						if(event.type === 'refresh' || event.type === 'exchangeRow'){
							if(data.limit>-1){
								var dataOffset = data.getOffset(),iStart = dataOffset-data.limit;
								settings.iInitDisplayStart = iStart>=0?iStart:0;
							}
							self.reload();
						}else if(event.type === 'slaveDataChanged'){
							if(self._eventHandles['__roload__']) window.clearTimeout(self._eventHandles['__roload__']);
							self._eventHandles['__roload__'] = window.setTimeout(function(){self.reload();self._eventHandles['__roload__']=null;},10);
						}else if(event.type === 'clear') self.clear();
						else if(event.type === 'delete'){
							rows = event.deleteRows;
							for(i=0;i<rows.length;i++){
								self.removeRow(rows[i]);
							}
						}else if(event.type === 'new'){
							rows = event.rows;
							for(i=0;i<rows.length;i++){
								self.addRow(rows[i]);
							}
						}
						self._processFooter();
					}
				};
				data[fn](Data.EVENT_DATA_CHANGE,this._eventHandles['__data_change__']);
			}
		},
		getSelection: function(){
			return this._lastsel;
		},
		setSelection : function(row){
			var tr = this.getRow(row);
			var api = this.dataTableApi();
			var data = this.getData();
			if(tr){
				var $tr = $(tr.node());
				this._lastsel = tr.data();
				if(data) data.to(this._lastsel);
				if(this.rowActiveClass){
					if(!$tr.hasClass(this.rowActiveClass)){
						api.$('tr.'+this.rowActiveClass).removeClass(this.rowActiveClass);
						$tr.addClass(this.rowActiveClass);
						var evtData = {
								source : this,
								row: this._lastsel,
								rowID: this._lastsel?this._lastsel.getID():null
							};					
						this.fireEvent('onRowSelect', evtData);
					}
				}
			}
		},
		getCheckeds: function(){
			var ret = null;
			if(this.multiSelect){
				ret = [];
				var $table = this.dataTableApi();
				this.$domNode.find('tbody tr').each(function(){
					var row = $table.row(this).data();
					if($(this).find('td.dataTables-cb input').prop('checked'))
						ret.push(row);
				});
			}
			return ret;
		},
		isChecked: function(row){
			var tr = this.getRow(row);
			return tr?$(tr.node()).find('td.dataTables-cb input').prop('checked'):false;
		},
		setRowChecked: function(row,checked){
			var tr = this.getRow(row);
			if(tr) $(tr.node()).find('td.dataTables-cb input').prop('checked',checked);
		},
		setAllRowChecked: function(checked){
			this.$domNode.find('tbody td.dataTables-cb input').prop('checked',checked);
		},
		getData : function(){
			if(this.data)
				return this.getModel().comp(this.data);
		},
		addRow: function(row){
			var $table = this.dataTableApi();
			$table.row.add(row).draw();
		},
		removeRow: function(row){
			var r = this.getRow(row);
			if(r) r.remove().draw();
		},
		reload: function(){
			var chs = this.getCheckeds();
			var $table = this.dataTableApi();
			$table.ajax.reload();
			$table.columns.adjust();
			if($.isArray(chs)){
				var me = this;
				$.each(chs,function(i,v){
					me.setRowChecked(v, true);
				});
			}
		},
		refresh: function(){
			this.reload();
		},
		clear: function(){
			var $table = this.dataTableApi();
			$table.clear().draw();
		},
		getRow : function(row){
			var $table = this.dataTableApi();
			var ri = $table.data().indexOf(row);
			return (ri>-1)?$table.row(ri):null;
		},
		getCell : function(row,col){
			var $table = this.dataTableApi();
			var ri = $table.data().indexOf(row),ci=-1;
			var colDefs = $table.settings()[0].aoColumns;
			$.each(colDefs, function(i,colDef){
				if(colDef.sName===col){
					ci = i;
					return false;
				}
			});
			return (ri>-1 && ci>-1)?$table.cell(ri, ci):null;
		},
		dataTableApi: function(){
			return this.$domNode.DataTable();
		},
		getColumn: function(col){
			var $api = this.dataTableApi(),ci=-1;
			var colDefs = $api.settings()[0].aoColumns;
			$.each(colDefs, function(i,colDef){
				if(colDef.sName===col){
					ci = i;
					return false;
				}
			});
			return (ci>-1)?$api.column(ci):null;
		},
		hideCol: function(col){
			var column = this.getColumn(col);
			if(column)
				column.visible(true);
		},
		showCol: function(col){
			var column = this.getColumn(col);
			if(column)
				column.visible(false);
		},
		setRowCss: function(row,css){
			var tr = this.getRow(row);
			if(tr) $(tr).css(css);
		},
		setFooterData: function(fData){
			var self = this;
			$.each(fData,function(n,v){
				var col = self.getColumn(n);
				if(col) $(col.footer()).html(v);
			});
		},
		// 更新
		update : function(value, bindingContext) {
			//目前没有
		}
	});

	justep.Component.register(url, DataTables);
	return DataTables;
});
Example #6
0
define(function(require) {
	require("$UI/system/components/justep/common/res");
	var justep = require("$UI/system/lib/justep");
	var url = require.normalizeName("./tabs");
	var $ = require("jquery");
	require('css!./css/tabs').load();
	require("$UI/system/components/bootstrap/lib/js/bootstrap");
 
 
	var Tabs = justep.ViewComponent.extend({
		dispose : function() {
			$(window).off('resize', this.resizeHandle);

			this.callParent();
		},
		init: function(value, bindingContext){
			var self = this;
			self.callParent(value, bindingContext);
			this.resizeHandle = this._doResize.bind(this);
			$(window).on('resize', this.resizeHandle);
			
			var $domNode = $(this.domNode);
			this.$node = $domNode;
			this.$panel = $(">.x-panel", $domNode);
			this.$contents = $(">.x-panel-content>.x-contents", this.$panel);
	 
			$domNode.on("click", ">.x-panel>.x-panel-top>.nav>li", function() {
				var $this = $(this);
		       	var selectEvent = {source: self, tab:$this, cancel: false};
	        	self.fireEvent(Tabs.BEFRESELECT_EVENT, selectEvent);
	        	if(selectEvent.cancel === true){
	        		return;
	        	}
				self.setActiveTab($this);
			});
        	var me = this,
	    		panel = this.getModel().componentPromise(this.$panel[0]),
    			contents = this.getModel().componentPromise(this.$contents[0]);
	    	$.when(panel, contents).then(
	    		function(panel, contents){
	    			me.panel = panel;
	    			me.contents = contents;
	    			me.contents.on("onActiveChanged", function(event){
	    				var index = event.to;
	    				if(me.index != index){
		    				var li = $(">.x-panel>.x-panel-top>.nav>li", me.domNode).eq(index);
		    				me.setActiveTab(li);
	    				}
	    			});
	    			me.inited();
	    			me._doResize();
	    		},
	    		function(err){
	    			alert(err);
	    		}
	    	);
	    	return {dependence: true};
		},
		_doResize: function(evt){
			var h = $(">.x-panel>.x-panel-top>.nav",this.domNode).outerHeight();
			if(h>1){
				$(">.x-panel>.x-panel-top",this.domNode).css('height',h);
				$(">.x-panel>.x-panel-content",this.domNode).css('top',h);
			}
		},
		setActiveTab : function(tab){
			if(typeof tab == 'string'){
				tab = $(">.x-panel>.x-panel-top>.nav>li[xid='"+tab+"']",this.domNode);
			}
			$(">li", tab.parent()).removeClass("active");
			tab.addClass("active");
			
			this.index = tab.index();
			this.contents.to(this.index);
			
			//通知变化,主要刺激grid重画
			this.getModel().fireEvent("onResize",{source:this});
			
			var selectEvent = {source: this, tab:tab};
        	this.fireEvent(Tabs.SELECT_EVENT, selectEvent);
		}
	});
	
	Tabs.BEFRESELECT_EVENT = "onBeforeSelect";
	Tabs.SELECT_EVENT = "onSelect";
	
	justep.Component.addOperations(Tabs, {
		setActiveTab: {
			label : justep.Message.getMessage(justep.Message.JUSTEP233010),
			//icon : '',
			argsDef: [{name:'xid',displayName:'切换的tab(li) xid'}],
			method : function(args) {
				return this.owner.setActiveTab(args.xid);
			}
		},
	});
	
	justep.Component.register(url, Tabs);
	return Tabs;
});