Обновление хранилища ExtJS Gridpanel

#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();

Это приведет к перезагрузке хранилища сетки и получению новых данных.