我正在从数据库绑定ExtJs Gridpanel,并在我的Gridpanel下方添加“删除”按钮。通过使用删除按钮处理程序,我已经删除了Gridpanel上选择的记录。但是,在删除后,网格没有刷新(虽然已经从数据库中删除,但由于没有刷新,仍然显示在网格中)。
如何在删除处理程序之后刷新网格?
我正在从数据库绑定ExtJs Gridpanel,并在我的Gridpanel下方添加“删除”按钮。通过使用删除按钮处理程序,我已经删除了Gridpanel上选择的记录。但是,在删除后,网格没有刷新(虽然已经从数据库中删除,但由于没有刷新,仍然显示在网格中)。
如何在删除处理程序之后刷新网格?
尝试刷新视图:
Ext.getCmp('yourGridId').getView().refresh();
ds.reload();
grid.store = store;
store.load({ params: { start: 0, limit: 20} });
grid.getView().refresh();
store.load();
即可。无需后续键入grid.getView().refresh();
。
另外,在删除处理程序中也可以键入store.remove(record)
,以确保已删除的记录不再显示在网格中。
使用store.remove比model.destroy更好。 该按钮的点击处理程序可能如下所示:
destroy: function(button) {
var grid = button.up('grid');
var store = grid.getStore();
var selected = grid.getSelectionModel().getSelection();
if (selected && selected.length==1) {
store.remove(selected);
}
}
Dasha和MMT解决方案的结合:
Ext.getCmp('yourGridId').getView().ds.reload();
grid.getStore().reload({
callback: function(){
grid.getView().refresh();
}
});
grid.getView().refresh();
在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);
}
刷新表格存储
Ext.getCmp('GridId').getStore().reload();
这将重新加载表格存储并获取新数据。