背景:根据业务需求,需要在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);
但是我用的时候红线部分报错。说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 根据数据初始化选中,布布扣,bubuko.com
原文:http://blog.csdn.net/fudaxing/article/details/22431939