Domanda

Devo rimuovere un elemento selezionato in un editorgrid. Innanzitutto viene caricato l'archivio e l'utente può scegliere di aggiungere o eliminare righe vuote in questa griglia che possono quindi modificare. Il problema non riguarda la rimozione dei record iniziali caricati dall'archivio. Il problema si presenta quando aggiungo una riga aggiuntiva, la modifico e quindi scelgo di rimuoverla (l'utente può decidere di non aver bisogno di questa riga dopo tutto).

Sembra che quando vorrei salvare le modifiche usando store.getModifiedRecords, vede ancora la riga che è stata eliminata e quindi la elabora. Ecco il pulsante di rimozione:

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             }
È stato utile?

Soluzione

Ecco come funziona store.getModifiedRecords (). I record dei record modificati sono memorizzati in un array chiamato modificato nell'oggetto store. Quando rimuovi un articolo dal negozio, questo non viene rimosso per impostazione predefinita.

Ecco l'attuale remove () dallo store

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);
}

Ciò significa che l'elemento viene rimosso dall'elenco modificato solo se si specifica il valore dell'opzione pruneModifiedRecords su true. Questo valore è falso per impostazione predefinita, come indicato nell'API Store.

Se si desidera che l'elemento appena aggiunto venga rimosso dall'elenco modificato, è necessario impostare il valore di pruneModifiedRecords su true durante la creazione del negozio Es .:

var stote = new Ext.data.SimpleStore({
    fields: [],
    data: [],
    pruneModifiedRecords: true
})

Altri suggerimenti

store.load(); 
//remove function will delete specific record.
store.remove(store.findRecord("item_id","1"));
store.sync();

Penso che il seguente link possa aiutarti in modo semplice come gestire il negozio

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

In cima alla mia testa, non riesco a capire perché il tuo codice funzioni in questo modo, poiché sembra essere corretto. Hai usato Firebug per impostare un breakpoint ed eseguire il processo?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top