#extjs
#extjs
Вопрос:
Я привязываю ExtJS Gridpanel к базе данных и добавляю кнопку «Удалить» под моей gridpanel. Используя обработчик кнопки удаления, я удалил выбранную запись на gridpanel. Но после удаления сетка не обновляется (она удаляется из базы данных, но отображается в таблице из-за отсутствия обновления).
Как я могу обновить сетку после удаления обработчика?
Ответ №1:
Попробуйте обновить представление:
Ext.getCmp('yourGridId').getView().refresh();
Комментарии:
1. похоже, это не работает. 80% моих строк просто исчезают
Ответ №2:
перезагрузите ds, чтобы обновить сетку.
ds.reload();
Комментарии:
1. Это работает! getView().refresh(), похоже, не имеет никакого эффекта.
2. Обновление представления по-прежнему работает с локальными данными. Если вы удаляете запись только на сервере, а не локально, обновление вам не поможет.
Ответ №3:
grid.store = store;
store.load({ params: { start: 0, limit: 20} });
grid.getView().refresh();
Комментарии:
1. Вы уверены, что следует вызывать grid.view.refresh() сразу после асинхронной загрузки?
Ответ №4:
У меня была похожая проблема. Все, что мне нужно было сделать, это ввести store.load();
в обработчике удаления. Не было необходимости впоследствии вводить grid.getView().refresh();
.
Вместо всего этого вы также можете ввести store.remove(record)
в обработчике удаления; — это гарантирует, что удаленная запись больше не отображается в таблице.
Ответ №5:
попробуйте это grid.getView().refresh();
Комментарии:
1. Он ответил на это на 1 минуту позже принятого ответа, вероятно, они печатали в одно и то же время, но у них были разные скорости Интернета.
Ответ №6:
Лучше использовать store.remove, чем model.destroy. Обработчик нажатия для этой кнопки может выглядеть следующим образом:
destroy: function(button) {
var grid = button.up('grid');
var store = grid.getStore();
var selected = grid.getSelectionModel().getSelection();
if (selected amp;amp; selected.length==1) {
store.remove(selected);
}
}
Ответ №7:
grid.getStore().reload({
callback: function(){
grid.getView().refresh();
}
});
Ответ №8:
Сочетание решений Dasha’s и MMT:
Ext.getCmp('yourGridId').getView().ds.reload();
Ответ №9:
Другой подход в 3.4 (не знаю, правильно ли это Ext): у вас может быть обработчик удаления, подобный этому, предполагая, что в каждой строке есть кнопка «Удалить».
handler: function(grid, rowIndex, colIndex) {
var rec = grid.getStore().getAt(rowIndex);
var id = rec.get('id');
// some DELETE/GET ajax callback here...
// pass in 'id' var or some key
// inside success
grid.getStore().removeAt(rowIndex);
}
Ответ №10:
Обновить хранилище сетки
Ext.getCmp('GridId').getStore().reload();
Это приведет к перезагрузке хранилища сетки и получению новых данных.