/* * Balancebeam Widget Grid_Plugin_Selectable 1.0 * * Description : Support for multiple-choice * Copyright 2011 * License : MIT * Author : yangzz * Mail : balancebeam@163.com * * Depends: * balancebeam/lib/widget/grid/beam.grid.js */ (function($, undefined ) { $.ui.grid.selectable = function(grid,params){ this.grid = grid; this._create(params); }; //selectable原型定义 $.ui.grid.selectable.prototype = { //bind event _create : function(params){ var self = this, grid = this.grid, id = grid.element.attr("id"); self.selected = params.selected;//选择器属性。 li-shun 2012-05-06 self.checklogic = params.checklogic;//选择器属性。 li-shun 2012-05-06 grid.subscribe("select.grid-selectable",this,"select"); grid.subscribe("selectAll.grid-selectable",this,"selectAll"); var column =this.column= { width : 28, resizable:false, sortable: false, dropmenu:false, draggable:false, noswap:true, format : function(inRowIndex){ var html = [], checked = !!grid.runtime.dataProvider[inRowIndex]["s"] && "checked" || ""; if(self.checklogic != "single"){ html.push(""); return html.join(""); }, lockedRowFormat : function(inRowIndex){ var html = [], checked = !!grid.runtime.lockedRowDataProvider[inRowIndex]["s"] && "checked" || ""; html.push(""); return html.join(""); }, formatHeader:function(){ var html = [], checked = column.checkedAll ? "checked" : ""; //select为单选时,不渲染全选框。 li-shun 2012-05-06 if(self.checklogic != "single"){ html.push(""); } return html.join(""); } }; grid.runtime.playout.push(column); }, //选中某一个记录 select : function(e){ var target = $(e.target), rowIndex = Number(target.attr("rowIndex")); //实现select的单选操作。 li-shun 2012-05-06 if(this.checklogic == "single"){ var dataProvider; if(target.attr("lockedView")){ dataProvider = this.grid.runtime.lockedRowDataProvider; }else { dataProvider = this.grid.runtime.dataProvider; } for(var i=0,d;d = dataProvider[i];i++){ if(d["s"] && rowIndex != i){ d["s"] = false; } } } if(target.attr("lockedView")){ this.grid.runtime.lockedRowDataProvider[rowIndex]["s"] = target[0].checked; } else{ this.grid.runtime.dataProvider[rowIndex]["s"] = target[0].checked; } if(this.checklogic == "single"){ this.grid.resize();//单选时重新刷新全部。 li-shun 2012-05-06 } //选择时回调函数。参数列表(事件, 选择器对象, 当前行号)。 li-shun 2012-05-10 if(jQuery.isFunction(this.selected)){ this.selected(e, this, rowIndex); } }, //选中所有记录 selectAll : function(e){ var target = $(e.target), checked = target[0].checked, dataProvider = this.grid.runtime.dataProvider; this.column.checkedAll = checked; for(var i=0,d;d = dataProvider[i];i++){ d["s"] = checked; } dataProvider = this.grid.runtime.lockedRowDataProvider; for(var i=0,d;d = dataProvider[i];i++){ d["s"] = checked; } this.grid.resize(); }, //获取所有选中记录 getSelected : function(){ var dataProvider = this.grid.runtime.dataProvider, selected = []; for(var i=0,d;d = dataProvider[i];i++){ if(d["s"]){ selected.push(d["d"]); } } return selected; }, destroy : function(){ this.grid.unsubscribe("select.grid-selectable"); this.grid.unsubscribe("selectAll.grid-selectable"); } }; //注入plugin $.ui.grid.plugins.register("selectable",$.ui.grid.selectable); })(jQuery);