Я пытаюсь создать динамическую сетку, используя 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);
}
поведение я ищу, чтобы отобразить результат сетки в закладке и если эта вкладка существует заменила старую сетку. Любая помощь приветствуется.
Спасибо
Отлично работает. Спасибо. Что касается разрушения и воссоздания сетки каждый раз, я, к сожалению, не могу гарантировать ограниченное количество сеток, поэтому у меня нет выбора. BTW Почему разрушение сетки не считается хорошей стратегией? – ken
GridPanel - это самый тяжелый компонент с точки зрения как разметки, так и памяти (кроме, возможно, TreePanel с множеством узлов). Если вы не будете осторожны (или если у Ext есть ошибки, связанные с разрушением компонентов, как это было в прошлом), это может привести к утечке DOM с течением времени. Кроме того, создание сетки занимает много времени с точки зрения пользователя, поэтому повторное создание сетки или просто отображение скрытого - большая разница в восприятии производительности вашего приложения (особенно когда это делается часто, как вы это делаете). Рад, что вы решили свою проблему. –
Полезно знать.Я попытаюсь сосредоточиться на этом больше, когда я получу четкую идею, могу ли я контролировать количество запрошенных сеток. Возможно, есть пул гридов для обслуживания и ограничения их числа. – ken