Extjs - Eliminar el elemento seleccionado recientemente agregado de la tienda
-
06-07-2019 - |
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 }
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
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?