后台json选中 CheckboxSelectionModel
var sm=new Ext.grid.CheckboxSelectionModel();
var cm=new Ext.grid.ColumnModel([
sm,
{
align:'center',
header : "车属单位" ,
dataIndex : "deptname",
renderer:ZeroorNull
}, {
align:'center',
header : "车种名",
dataIndex : "carkindsname",
renderer:ZeroorNull
}
]}
不知怎么才通过后台勾选??有什么提示,或者给事例。
希望,如图显示
你在sotre里加一个selected列,如果要选中在后台把它设置用true
如
[code="java"]
{deptname:'aa',carkindsname:'bb',selected:true}
[/code]
[code="java"]
var sm = new Ext.grid.CheckboxSelectionModel();
var cm = new Ext.grid.ColumnModel([sm, {
align : 'center',
header : "车属单位",
dataIndex : "deptname",
renderer : ZeroorNull
}, {
align : 'center',
header : "车种名",
dataIndex : "carkindsname",
renderer : ZeroorNull
}])
grid.store.on('load', function(store, records, options) {
sm.clearSelections();
Ext.each(records, function(rec) {
if (rec.get('selected')) {
sm.selectRow(grid.store.indexOfId(id),
true);
}
})
});
[/code]
可以分开来传递,Grid显示的数据是使用store去加载的,而选中状态是本地的。
你可以给Grid扩展一个getSelections/setSelections接口,store让它自己去加载列表数据,选中数据用其它的ajax去请求,完成后调用setSelections接口设置。
这里的setSelections是设计为透明的,不管何时调用都能有效,就算未render或store未加载完成也可以。
P.S. 以前扩展过这样的Grid组件,不过手上没源码,花些时间回忆整理了大概逻辑,未调试验证,你自己研究改改吧。
[code="js"]
var store = new Ext.data.JsonStore({
idProperty : "id", // 根据实际调整记录的唯一标识属性名
listeners : {
"load" : function(store){
store.loaded = true; // 自己加个属性,以便判断store是否加载过
}
}
});
var grid = new Ext.grid.GridPanel({
store : store,
listeners : {
"viewready" : function(grid){
// 监控界面何时更新完毕,原始的viewready不保险
grid.actualViewReady = true;
}
},
// 根据id数组设置选中状态
setSelections : function(ids){
this._selectedIds = ids; // 暂时存于grid上
this.updateSelectionUI(); // 尝试更新界面
},
// 获取当前选中的记录id数据
getSelections : function(){
var ids = [], records;
records = this.getSelectionModel().getSelections();
Ext.each(records, function(record){
ids.push(record.id);
});
return ids;
},
// private
getSelectedIndexs : function(){
var ids = this._selectedIds, store = this.store, indexs = [];
Ext.each(ids, function(id){
indexs.push(store.indexOfId(id));
});
return indexs;
},
// private
updateSelectionUI : function(){
var store = this.store, indexs, sm;
if(this.actualViewReady){
if(store.loaded){ // 只有当store加载(load)完毕,并grid的界面渲染(render)完成时才能更新选中状态
indexs = this.getSelectedIndexs();
sm = this.getSelectionModel();
if(sm.selectRows){
sm.selectRows(indexs);
}
}else if(!this._storeHooked){ // 如果store未加载完成,延后,等它完成再更新
this._storeHooked = true;
store.on("load", this.updateSelectionUI, this, {single:true});
}
}else if(!this._viewHooked){ // 如果界面未更新完成,延后,也等它完成再更新
this._viewHooked = true;
this.on("viewready", this.updateSelectionUI, this, {single:true});
}
}
});
[/code]