Я пытаюсь создать динамический grid
, используя ExtJS. 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);
}
Нужное мне поведение - отображать результат сетки на вкладке, и если эта вкладка существует, замените старую сетку.
Любая помощь приветствуется.