说明:勾选某几条记录后,翻页再翻回来,保持原来的选中状态。
原理:在勾选或取消勾选的时候用recordIds保存或删除勾选中的Record的主键id值,
每次store加载(load事件)完后,遍历store,比较每条Record的主键列id是否在recordIds中,
若存在则将Record保存到临时变量records中,最后调用selMod.selectRecords(records, true);
写Array的remove与contains方法,搞得有点像java.util.HashSet(不让Array存重复值)
function RemoveArray(array,attachId){ for(var i=0,n=0;i<array.length;i++){ if(array[i]!=attachId){ array[n++]=array[i] } } array.length -= 1; } function containsArray(array,attachId){ for(var i=0;i<array.length;i++){ if(array[i]==attachId){ return true; break; } } return false; } Array.prototype.remove = function (obj) { return RemoveArray(this,obj); }; Array.prototype.contains = function (obj) { return containsArray(this,obj); };
var recordIds=new Array();// 选中的Record主键列id列表 var recordsChecked=new Array();// 选中的Record列表 var store = new Ext.data.JsonStore({ url : 'viewXXX.do', pruneModifiedRecords : true, totalProperty : 'totalProperty', root : 'root', fields : [{name : 'id'}, {name : 'status'} ], listeners : { load : function() { var records = new Array(); store.each(function(record) { if (recordIds.contains(record.data.id)) records.push(record); }); selMod.selectRecords(records, true);// 以后每次load数据时,都会默认选中 } } }); var selMod = new Ext.grid.CheckboxSelectionModel({ handleMouseDown : Ext.emptyFn, listeners : { "rowdeselect" : { fn : function(e, rowIndex, record) { if (recordIds.contains(record.data.id)) { recordIds.remove(record.data.id); recordsChecked.remove(record); } } }, "rowselect" : { fn : function(e, rowIndex, record) { if (!recordIds.contains(record.data.id)) recordIds.push(record.data.id); recordsChecked.push(record); } } } });