Extjs grid checkbox 根据数据初始化选中

背景:根据业务需求,需要在grid里面加载很多数据,再根据每条数据的某个属性确定该条数据是否被选中。

过程:google了一下,发现一个老外提供了下面的方法。

Ext.Ajax.request({
        method: ‘POST‘,
        url:‘index.php/mapper/get_tag_subfields/‘,
        scope: this,
        params  : {
            id:this.gridB.getSelectionModel().getSelection()[0].data.id,
        },
        success: function(xhr){
            var json =Ext.decode(xhr.responseText); // make sure to decode for loadData to work
// data is formatted, just needto load data
           storeMapperSubfields.loadData(json.data);
            // mark checkboxes
            if(json.data.length){
                for (var i = 0; i <json.data.length; i++){
                    var rec =this.gridC.store.getById(json.data[i].id); // json.data[i].getId()
                    if(rec.data.field_type == ‘s‘){ // select all records have have ‘s‘
                       this.gridC.getSelectionModel().select(rec,true,false);
                    }
                }
            }
        },
        failure: function() {
           Ext.getBody().unmask();
            alert(‘AJAX FAILURE: Unableto process call‘);
        }
    });
}, this);


 

源文档 <http://www.sencha.com/forum/showthread.php?194117-how-set-selected-row-in-default-when-load-gridpanel-using-checkbox-selection-model>


但是我用的时候红线部分报错。说views[0]找不到。

下面是我的代码:

 Ext.Ajax.request( {  
			        url : ‘/aaaaaaaaaaa/bbbbbbbbbbbbbbb.do‘,  
			        method : ‘post‘,  
			        params : {  
			        	methodName:‘aaaaaaaaaaa‘,
			          	policyid:policyid,
			          	appid:appid
			        },  
			        success : function(response, options) {  
			            var result = Ext.JSON.decode(response.responseText);
			            var editTitle=‘采集策略‘+policyName+‘操作请求修改‘;
				        var editPolicyPanelOpers = new PM.view.policy.PolicyEditOpers({
				                title: editTitle//,
				                //data: result.data
				            });
				        //设置policyid
				        Ext.ComponentQuery.query(‘window#policyeditopers textfield#selectPolicyid‘)[0].setValue(policyid);
				        Ext.ComponentQuery.query(‘window#policyeditopers textfield#selectAppid‘)[0].setValue(appid);
				        var operGrid = Ext.ComponentQuery.query(‘window#policyeditopers grid#oper_grid‘)[0];
				        var opersStore = Ext.getStore(‘BusinessOperStore‘);
				        if("undefined" != typeof opersStore)
			        	{
				            opersStore.loadData(result.data);
				            operGrid.reconfigure(opersStore);
				            for (var i = 0; i < result.data.length; i++){
			                    var rec = operGrid.store.getById(result.data[i].businessoperid); // json.data[i].getId()
			                    if (rec.data.selected == true){ // select all records have have ‘s‘
			                    	operGrid.getSelectionModel().select(rec,true,false);
			                    }
			                }

			        	}
				        //设置appid
				        editPolicyPanelOpers.show();
			        },  
			        failure : function() {  
			        	var o = Ext.JSON.decode(response.responseText);  
			           // alert(o.msg); 
			             Ext.Msg.alert(‘提示信息‘,o.message);
			        }  
			    }); 

查阅了select(rec,true,false)的方法。说rec这个参数要么是index,要么是record的实例。
询问同时,他说是渲染的问题。说我调用的地方不对。
接着就是自己瞎折腾:查阅了源代码,发现属性selected为私有。不能通过它设置选中与否。
几个小时过去后,又想到同事的话。
最后自己耐心地去实践了一下。果然是这个问题。这个问题解决了,但花去了一下午加一晚上的时间。

下面是代码片段:

init:function(){
		this.control({
			  ‘policyeditopers grid#oper_grid‘:{
				  afterrender:this.selectModel
			  }
		});
	},
	selectModel:function(){
		Ext.Msg.alert(‘selectModel‘,‘test‘);
		 var operGrid = Ext.ComponentQuery.query(‘window#policyeditopers grid#oper_grid‘)[0];
		for (var i = 0; i < operGrid.getSelectionModel().store.data.items.length; i++){
            var rec = operGrid.store.getById(operGrid.getSelectionModel().store.data.items[i].data.businessoperid); // json.data[i].getId()
            if (rec.data.selected == true){ // select all records have have ‘s‘
            	operGrid.getSelectionModel().select(rec,true,false);
            }
        }
	}



Extjs grid checkbox 根据数据初始化选中,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。