我想用Extjs创建一个动态网格。当点击事件被触发时,网格被构建和显示,然后ajax请求被发送到服务器以获取列,记录和记录定义a.k.a存储字段。每个节点可以具有不同的网格结构,并且取决于树中节点的级别。Extjs动态网格
我想出了迄今为止唯一的办法就是
function showGrid(response, request) {
var jsonData = Ext.util.JSON.decode(response.responseText);
var grid = Ext.getCmp('contentGrid'+request.params.owner);
if(grid) {
grid.destroy();
}
var store = new Ext.data.ArrayStore({
id : 'arrayStore',
fields : jsonData.recordFields,
autoDestroy : true
});
grid = new Ext.grid.GridPanel({
defaults: {sortable:true},
id:'contentGrid'+request.params.owner,
store: store,
columns: jsonData.columns,
//width:540,
//height:200,
loadMask: true
});
store.loadData(jsonData.records);
if(Ext.getCmp('tab-'+request.params.owner)) {
Ext.getCmp('tab-'+request.params.owner).show();
} else {
grid.render('grid-div');
Ext.getCmp('card-tabs-panel').add({
id:'tab-'+request.params.owner,
title: request.params.text,
iconCls:'silk-tab',
html:Ext.getDom('grid-div').innerHTML,
closable:true
}).show();
}
}
的功能时点击事件被触发
'click': function(node) {
Ext.Ajax.request({
url: 'showCtn',
success: function(response, request) {
alert('Success');
showGrid(response,request);
},
failure: function(results, request) {
alert('Error');
},
params: Ext.urlDecode(node.attributes.options);
}
我与这段代码获得的问题是,上述被称为每次showGrid函数被调用时都会显示一个新的网格。最终用户会看到旧的网格和新的网格。为了缓解这个问题,我尝试销毁网格,并删除每个请求上的网格元素,这似乎解决了问题,只有记录从未显示这次。
if(grid) {
grid.destroy(true);
}
我在找的行为是一个选项卡中显示网格的结果,如果该选项卡存在代替了旧的网格。任何帮助表示赞赏。
谢谢
大它的工作原理。谢谢。 至于摧毁和重建每一次电网,我不能保证数量有限的电网,所以我别无选择。顺便说一句为什么销毁电网不被认为是一个好策略? – ken 2010-03-12 20:45:13
GridPanel在标记和内存占用方面都是最重的组件(除了可能有很多节点的TreePanel外)。如果你不小心(或者如果Ext像过去一样有任何与组件销毁有关的错误),那么随着时间的推移,这可能导致DOM泄漏。此外,从用户的角度来看,创建网格非常耗时,因此重新创建网格而不是简单地展示隐藏网格是您应用感知性能的一大差异(尤其是在经常按照您的操作进行时)。很高兴你解决了你的问题。 – 2010-03-12 23:19:50
很高兴知道。如果我可以控制请求的网格数,我会尝试更多地关注这一点。也许有一组网格来服务并限制他们的数量。 – ken 2010-03-13 06:19:57