Extjs-新しく追加された選択アイテムをストアから削除
-
06-07-2019 - |
質問
editorgridで選択したアイテムを削除する必要があります。最初にストアがロードされ、ユーザーはこのグリッドに空白行を追加または削除して、編集できるように選択できます。問題は、ストアからロードされた初期レコードを削除することではありません。問題は、行を追加して編集し、削除することを選択したときに発生します(ユーザーは結局この行は必要ないと判断するかもしれません)。
store.getModifiedRecordsを使用して変更を保存する場合、削除された行がまだ表示されているため、同様に処理されているようです。削除ボタンは次のとおりです。
442
443 text:'Remove',
444 tooltip:'Remove attribute',
445 iconCls:'silk-table_delete',
446 handler: function() {
447 var selectedItem = attributeEditor.getSelectionModel().getSelected();
448
449 // Check if we have selected item
450 if (selectedItem) {
451 // Get selected item value
452 var attribute = selectedItem.get('Name');
453
454 // Remove selected
455 attributeStore.remove(selectedItem);
456
457 // Add to our removed attributes hash
458 if (id) {
459 RemovedAttributes.push(attribute);
460 }
461 } else {
462 wispUserFormWindow.getEl().mask();
463
464 // Display error
465 Ext.Msg.show({
466 title: "Nothing selected",
467 msg: "No attribute selected",
468 icon: Ext.MessageBox.ERROR,
469 buttons: Ext.Msg.CANCEL,
470 modal: false,
471 fn: function() {
472 wispUserFormWindow.getEl().unmask();
473 }
474 });
475 }
476 }
477 }
解決
これは、store.getModifiedRecords()の動作方法です。変更されたレコードレコードは、変更されたストアオブジェクトと呼ばれる配列に格納されます。ストアからアイテムを削除しても、デフォルトでは削除されません。
これは、ストアからの実際のremove()です
remove : function(record){
var index = this.data.indexOf(record);
this.data.removeAt(index);
if(this.pruneModifiedRecords){
this.modified.remove(record);
}
if(this.snapshot){
this.snapshot.remove(record);
}
this.fireEvent("remove", this, record, index);
}
これは、pruneModifiedRecordsオプションの値をtrueに指定した場合にのみ、アイテムが変更リストから削除されることを意味します。 Store APIで説明されているように、この値はデフォルトでfalseです。
新しく追加されたアイテムを変更リストから削除する場合は、ストアの作成時にpruneModifiedRecordsの値をtrueに設定する必要があります 例:
var stote = new Ext.data.SimpleStore({
fields: [],
data: [],
pruneModifiedRecords: true
})
他のヒント
store.load();
//remove function will delete specific record.
store.remove(store.findRecord("item_id","1"));
store.sync();
i次のリンクは、ストアを処理する簡単な方法に役立つと思います
私の頭上では、正しいように見えるので、なぜあなたのコードがそのように動作するのかわかりません。 Firebugを使用してブレークポイントを設定し、プロセスをステップスルーしましたか?