ExtJS ( Расширение ):удалите сетку с панели вкладок, если ее базовое хранилище пусто
-
18-09-2019 - |
Вопрос
У меня есть TabPanel, которая содержит, среди прочего, Сетку, подключенную к Магазину.
Несколько событий могут привести к удалению элементов из хранилища.
Я бы хотел, чтобы сетка удалялась с панели вкладок, когда хранилище пусто, и, возможно, чтобы в моем коде было одно место для проверки этого события.
Я думал об использовании прослушивателей хранилища, но, к сожалению, это вызывает исключения во внешнем коде.Мое предположение заключается в том, что это происходит потому, что рендеринг выполняется в сетке после того, как она удалена с панели вкладок.
Любая идея о том, как выполнить такую задачу, не испортив Ext, очень ценится.Спасибо :)
Кстати, это отрывок из кода:
var myStore = new Ext.data.Store({
reader: new Ext.data.JsonReader({fields: MyRecord}),
listeners:{
'clear': function(store, recs) {
myTabPanel.remove(myGrid);
},
'remove': function(store, rec, idx) {
if (store.getCount() == 0) {
myTabPanel.remove(myGrid);
}
}
}
});
var myGrid = new Ext.grid.GridPanel({
id: "myGrid",
title: "A Grid",
store: myStore,
frame:false,
border:false,
columns: [
{
header: 'Remove',
align:'center',
width: 45,
sortable: false,
renderer: function(value, metaData, record, rowIndex, colIndex, store) {
return '<img src="images/remove.png" width="34" height="18"/>';
}
},{
header: 'Some Data',
dataIndex: 'data',
sortable: true
}
],
listeners:{
'cellclick':function(grid, rowIndex, colIndex, e){
var rec = myStore.getAt(rowIndex);
if(colIndex == 0){
myStore.remove(rec);
}
}
}
});
var myTabPanel= new Ext.TabPanel({
activeTab: 0,
items: [ fooPanel, barPanel, myGrid]
});
Решение 2
Проблема решена:Мне просто пришлось удалить сетку, установив для параметра "autoDestroy" значение "false".Исправлен приведенный ниже код.
var myStore = new Ext.data.Store({
reader: new Ext.data.JsonReader({fields: MyRecord}),
listeners:{
'clear': function(store, recs) {
myTabPanel.remove(myGrid, false);
},
'remove': function(store, rec, idx) {
if (store.getCount() == 0) {
myTabPanel.remove(myGrid, false);
}
}
}
});
var myGrid = new Ext.grid.GridPanel({
id: "myGrid",
title: "A Grid",
store: myStore,
frame:false,
border:false,
columns: [
{
header: 'Remove',
align:'center',
width: 45,
sortable: false,
renderer: function(value, metaData, record, rowIndex, colIndex, store) {
return '<img src="images/remove.png" width="34" height="18"/>';
}
},{
header: 'Some Data',
dataIndex: 'data',
sortable: true
}
],
listeners:{
'cellclick':function(grid, rowIndex, colIndex, e){
var rec = myStore.getAt(rowIndex);
if(colIndex == 0){
myStore.remove(rec);
}
}
}
});
var myTabPanel= new Ext.TabPanel({
activeTab: 0,
items: [ fooPanel, barPanel, myGrid]
});
Другие советы
Есть какая-либо причина, по которой вы физически удаляете сетку со вкладки?Кажется странной парадигмой пользовательского интерфейса - почему бы просто не сохранить пустую сетку с "пустым" сообщением?
Во всяком случае, я думаю, что ваш подход (использование событий хранилища и количества записей для определения того, когда их удалять) в принципе в порядке.Возможно, вы захотите выяснить, как устранить все ошибки, которые, по вашим словам, вы получали.Кем они были?