データベースからExtJs Gridpanelをバインドし、gridpanelの下に「削除」ボタンを追加します。削除ボタンハンドラーを使用して、gridpanelで選択したレコードを削除しました。ただし、削除後、グリッドは更新されません(データベースから削除されますが、更新されないためグリッドに表示されます)。
ハンドラーを削除した後にグリッドを更新するにはどうすればよいですか?
ビューを更新してみてください。
Ext.getCmp('yourGridId').getView().refresh();
dsをリロードしてグリッドを更新します。
ds.reload();
grid.store = store;
store.load({ params: { start: 0, limit: 20} });
grid.getView().refresh();
同様の問題がありました。削除ハンドラーでstore.load();
と入力するだけでした。その後grid.getView().refresh();
と入力する必要はありませんでした。
これらすべての代わりに、削除ハンドラーでstore.remove(record)
と入力することもできます。 -これにより、削除されたレコードがグリッドに表示されなくなります。
DashaとMMTソリューションの組み合わせ:
Ext.getCmp('yourGridId').getView().ds.reload();
Model.destroyよりもstore.removeを使用する方が適切です。そのボタンのクリックハンドラは次のようになります。
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);
}
}
これを試してくださいgrid.getView().refresh();
grid.getStore().reload({
callback: function(){
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();
これにより、グリッドストアがリロードされ、新しいデータが取得されます。