/*
* 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);