Ext的CheckboxSelectionModel默认选中

说明:勾选某几条记录后,翻页再翻回来,保持原来的选中状态。

原理:在勾选或取消勾选的时候用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);
						}
					}
				}
			});


你可能感兴趣的:(ext)