Question

Je dois supprimer un élément sélectionné dans un éditeur de grille. Tout d’abord, le magasin est chargé et l’utilisateur peut choisir d’ajouter ou de supprimer des lignes vierges à cette grille qu’il pourra ensuite éditer. Le problème ne concerne pas la suppression des enregistrements initiaux chargés du magasin. Le problème survient lorsque j'ajoute une ligne supplémentaire, la modifie, puis décide de la supprimer (l'utilisateur peut décider qu'il n'a pas besoin de cette ligne, après tout).

Il semble que lorsque je souhaite enregistrer les modifications à l'aide de store.getModifiedRecords, il voit toujours la ligne qui a été supprimée et la traite également. Voici le bouton supprimer:

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             }
Était-ce utile?

La solution

C’est ainsi que fonctionne store.getModifiedRecords (). Les enregistrements d'enregistrements modifiés sont stockés dans un tableau appelé objet modifié en magasin. Lorsque vous supprimez un élément du magasin, il n'est pas supprimé par défaut.

Voici le remove () réel du magasin

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

Cela signifie que l'élément est supprimé de la liste modifiée uniquement si vous spécifiez la valeur de l'option pruneModifiedRecords sur true. Cette valeur est false par défaut, comme indiqué dans l'API de magasin.

Si vous souhaitez que l'élément nouvellement ajouté soit supprimé de la liste modifiée, vous devez définir la valeur de pruneModifiedRecords sur true lors de la création du magasin. Ex:

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

Autres conseils

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

Je pense que le lien suivant peut vous aider de manière simple à gérer un magasin

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

De mémoire, je ne vois pas pourquoi votre code fonctionnerait de cette façon, car il semble être correct. Avez-vous utilisé Firebug pour définir un point d'arrêt et suivre le processus?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top