Pregunta

Tengo que eliminar un elemento seleccionado en una cuadrícula del editor. Primero se carga la tienda y el usuario puede elegir agregar o eliminar filas en blanco a esta cuadrícula que luego puede editar. El problema no es eliminar los registros iniciales cargados de la tienda. El problema surge cuando agrego una fila adicional, la edito y luego elijo eliminarla (el usuario puede decidir que no necesita esta fila después de todo).

Parece que cuando me gustaría guardar los cambios usando store.getModifiedRecords, todavía ve la fila que se eliminó y, por lo tanto, también la procesa. Aquí está el botón eliminar:

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             }
¿Fue útil?

Solución

Así es como funciona store.getModifiedRecords (). Los registros de registros modificados se almacenan en una matriz llamada objeto modificado en la tienda. Cuando elimina un artículo de la tienda, no se elimina de forma predeterminada.

Aquí está el remove () real de la tienda

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

Esto significa que el elemento se elimina de la lista modificada solo si especifica el valor de la opción pruneModifiedRecords como verdadero. Este valor es falso de forma predeterminada como se menciona en la API de la tienda.

Si desea que el elemento recién agregado se elimine de la lista modificada, debe establecer el valor de pruneModifiedRecords como verdadero al crear la tienda Ej:

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

Otros consejos

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

Creo que el siguiente enlace puede ayudarlo con una manera fácil de manejar la tienda

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

Fuera de mi cabeza, no puedo ver por qué su código funcionaría de esa manera, ya que parece ser correcto. ¿Has utilizado Firebug para establecer un punto de interrupción y pasar por el proceso?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top