【发布时间】:2010-03-12 06:22:55
【问题描述】:
我正在尝试使用 ExtJS 创建一个动态的grid。 grid 在触发点击事件时构建并显示,然后将ajax 请求发送到服务器以获取列、记录和记录定义a.k.a 存储字段。
每个节点可以有不同的grid 结构,这取决于tree 中节点的级别。
到目前为止我想出的唯一方法是:
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);
}
我正在寻找的行为是在选项卡中显示网格的结果,如果该选项卡存在,则替换旧网格。
感谢任何帮助。
【问题讨论】: