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             }
War es hilfreich?

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

http://www.aswedo.net/sencha-touch/sencha-touch-adding-recordse-reading-data-and-deleting-records-t-store/

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top