转自:http://hi.baidu.com/programdragon/blog/item/3b6b52ef73e04fd9b21cb1e7.html
说明:勾选某几条记录后,翻页再翻回来,保持原来的选中状态。
原理:在勾选或取消勾选的时候用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);
- }
- }
- }
- });