ExtJs - Neu hinzugefügte ausgewählte Artikel aus dem Geschäft entfernen
-
06-07-2019 - |
Frage
Ich muss ein ausgewähltes Element in einem Editorgrid entfernen. Zunächst wird der Speicher geladen und der Benutzer kann dieses Raster, das er dann bearbeiten kann, hinzufügen oder löschen. Das Problem besteht nicht darin, anfängliche Datensätze aus dem Geschäft zu entfernen. Das Problem kommt ein, wenn ich eine zusätzliche Zeile hinzufüge, bearbeiten und dann entfernen möchte (der Benutzer kann entscheiden, dass er diese Zeile doch nicht benötigt).
Wenn ich Änderungen mit Store.GetModifiedRecords speichern möchte, sieht es immer noch die Zeile, die gelöscht wurde, und verarbeitet sie auch. Hier ist die Schaltfläche Entfernen:
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 }
Lösung
So funktioniert der Store.getModifiedRecords (). Die geänderten Datensätze werden in einem Array namens modifiziert im Speicherobjekt gespeichert. Wenn Sie einen Artikel aus dem Geschäft entfernen, wird er standardmäßig nicht entfernt.
Hier ist der tatsächliche Entfernung () aus dem Geschäft
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);
}
Dies bedeutet, dass das Element nur dann aus der geänderten Liste entfernt wird, wenn Sie den Optionswert PrunemodifiedRecords als True angeben. Dieser Wert ist standardmäßig falsch, wie in der Store -API erwähnt.
Wenn Sie möchten, dass das neu hinzugefügte Element aus der geänderten Liste entfernt wird, müssen Sie den Wert von PrunemodifiedRecords als wahr festlegen, wenn Sie den Store EX erstellen:
var stote = new Ext.data.SimpleStore({
fields: [],
data: [],
pruneModifiedRecords: true
})
Andere Tipps
store.load();
//remove function will delete specific record.
store.remove(store.findRecord("item_id","1"));
store.sync();
Ich denke
Ab meinem Kopf kann ich nicht verstehen, warum Ihr Code so funktioniert, da er anscheinend korrekt ist. Haben Sie Firebug verwendet, um einen Haltepunkt festzulegen und den Prozess durchzuführen?