现在的开发中,出现一个需求,就是需要在界面 中根据后台的数据动态的显示 gridpanel的列,同时需要固定某些列,闲话不说,先看代码,
在 主界面中 只有一个 gridpanel,其他啥也没有,看下:
{
xtype:"gridpanel",
width:"100%",
title:"详细信息EQPID",
id:"lotview_lotdetail_eqpid",
border:false,
enableLocking:true,//为了使用锁定列,需要开启这个配置
columns : []
}
现在就需要在方法中 给这个 gridpanel动态的添加列 和 数据
首先 添加extjs的model,有几个列是固定的,所以这里写死
//grid的列对象
var colObj = [];
colObj.push({
text : 'Stage',
locked: true, //表示锁定
dataIndex : 'stage'
});
colObj.push({
text : 'Recipe ID',
locked: true,
dataIndex : 'recipeId'
});
colObj.push({
text : 'Recipe Seq',
locked: true,
dataIndex : 'recipeSeq'
});
//创建一个 新的model
var colModel = Ext.create("Ext.data.Model",{
fields: colObj
});
//添加data,这里的rtnObj是后台过来的数据json对象
for(var i=0;i<rtnObj.length;i++){
var objTmp = {
"stage":rtnObj[i].stage,
"recipeId":rtnObj[i].recipeId,
"recipeSeq":rtnObj[i].recipeSeq
}
data.push(objTmp)
}
//创建一个 store
var newStore = Ext.create('Ext.data.Store', {
model: colModel,
data:data
});
//重新替换 store和列,注意,主要是这句
panel.reconfigure( newStore,colObj);
上面的最后一句代码,是关键,替换gridpanel中的store和columns。
到这里,已经完成 对gridpanel的动态添加列,这时,又得到一个需求,需要将列的值根据不同的值显示不同颜色。
var columns = panel.getColumns();
Ext.each(columns,function(column){
//除了几个固定的 列,其他列都需要添加render方法
column.renderer = function(value,row){
if(value=="1"){
row.css="myColor"; //自己定义的 css样式,例: .myColor{background: #E0E0E0;}
}
return value;
}
})
这里可能有的同学会有问题,因为我的主页面是tabpanel,所以第一次加载数据的时候并没有渲染,等点击标签页的时候再加载,所以没问题,但是如果有的同学本来就是在一个panel中,因为已经加载完了数据,所以再配置这个方法的时候会发现没有触发显示不同颜色的效果,这里,我想到两个方法,没有实际过,有需要的同学可以参考一下,
第一个:重新渲染,将当前的panel重新渲染的他的父组件上,例 panel.render("父组件ID");
第二个:第一个我们 替换的时候 ,不替换store,就是这句话panel.reconfigure( newStore,colObj);修改成
panel.reconfigure( null,colObj);
等给 columns添加完方法属性以后,我们重新用panel.setStore()这个方法来设置store。