質問
グリッドの削除ボタンを押すと、グリッドから行が消えますが、グリッドがリロードされると、その行が再び現れます。私は結果のない多くのコマンドを試しました。助けてください!前もって感謝します。
これは、グリッドを作成する関数です。
// create the data store
var store = new Ext.data.Store({
proxy: new Ext.ux.data.PagingMemoryProxy(myData),
remoteSort:true,
sortInfo: {field:'del', direction:'DESC'},
reader: new Ext.data.ArrayReader({
fields: [
{name: 'id'},
{name: 'name'},
{name: 'category'},
{name: 'price', type: 'float'},
{name: 'active', type: 'int'},
{name: 'actions', type:'text'}
]
})
});
そして、これが削除関数です:
buttons: [{
text: 'Add',
iconCls: 'silk-add',
handler: this.onAdd
}, '-', {
text: 'Delete',
iconCls: 'silk-delete',
handler: function(sm, rowIdx,r){
var s = grid.getSelectionModel().getSelections();
for(var i = 0, r; r = s[i]; i++){
// store.remove(r);
var index = store.data.indexOf(r);
if(index > -1){
r.join(null);
store.data.removeAt(index);
}
store.modified.remove(r);
if(index > -1){
store.fireEvent('remove', store, r, index);
}
store.destroyRecord(store, r, index);
}
store.reload();
},
}]
解決
grid.store.reload()メソッドを使用してグリッドをリロードすると、ストアはソースからデータをリロードします。この場合、ローカルデータ(配列またはjson文字列?)を使用しているように見えます。したがって、はい、あなたは店からレコードを削除していますが、リロードを呼び出すことで、それらのレコードを再挿入します。あなたの最善の策は、オブジェクト「mydata」から値を削除してから、リロードを呼び出すことです。それはあなたのための記録を取り除くはずです。
他のヒント
ex:mydata.splice(1,1)のためにmydataから削除する方法を見つけました。
所属していません StackOverflow