extjs 用cookie保存用户习惯隐藏列 刷新之后列显示不正常
如题,这是在网上查找到的代码,第一次登陆后,隐藏列刷新都正常,但是第二次继续隐藏列时,第一次隐藏的列就不隐藏了!如果将已隐藏的列恢复显示的话,那全部列都将显示!请问,这是怎么回事?
stateful:true,
stateId:'cookiegrid',
//下面有把cm的该事件托管给grid
stateEvents:['hiddenchange'],
//要存入cookie的数据
getState: function(){
return {initColumn:this.getColumnModel().initColumn};
},
//恢复
applyState:function(state, config){
if(state){
//for(var k in state.initColumn){
//alert("1212+="+state.initColumn[k]);
//}
Ext.apply(this,state);
}
//根据cookie取值设置hidden与否
var cm = this.getColumnModel();
for(var k in state.initColumn){
var col = cm.findColumnIndex(k);
cm.setHidden(col,state.initColumn[k]);
}
},
listeners:{
'beforerender':function(grid,state){
grid.on('hiddenchange',function(cm,columnIndex,hidden){
if(!cm.initColumn){
cm.initColumn = {};
}
//监听事件,把cm的显示情况存入cookie
cm.initColumn[cm.getDataIndex(columnIndex)]=hidden;
this.saveState();
},this);
//托管事件
grid.relayEvents(grid.getColumnModel(),['hiddenchange']);
}
} Cookie Ext?JS 隐藏列
[解决办法]
哈哈 我刚刚也遇到这类似的问题
应该是extjs的渲染机制的问题 我的解决办法就是settimeout 延迟 进行操作
EXTJS 的控件大多都会延迟进行渲染 (默认貌似是100MS)
或者是你能够确定页面渲染的步骤 然后在相应的地方进行操作
[解决办法]
在成功读取cookie后再执行DOM的操作