ExtJs - Remova o item selecionado recém -adicionado da loja
-
06-07-2019 - |
Pergunta
Eu tenho que remover um item selecionado em um editorGrid. Primeiro, a loja é carregada e o usuário pode optar por adicionar ou excluir linhas em branco a esta grade que podem editar. O problema não é remover os registros iniciais carregados da loja. O problema entra quando eu adiciono uma linha adicional, edite -o e opte por removê -lo (o usuário pode decidir que não precisa dessa linha, afinal).
Parece que, quando eu gostaria de salvar alterações usando o store.getModifiedRecords, ele ainda vê a linha que foi excluída e, portanto, o processa também. Aqui está o botão Remover:
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 }
Solução
É assim que o store.getModifiedRecords () funciona. Os registros de registros modificados são armazenados em uma matriz chamada objeto modificado na loja. Quando você remove um item da loja, ele não é removido por padrão.
Aqui está o Remof () real () da loja
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);
}
Isso significa que o item é removido da lista modificada somente se você especificar o valor da opção PrunemodifiedRecords como true. Este valor é falso por padrão, conforme mencionado na API da loja.
Se você deseja que o item recém -adicionado seja removido da lista modificada, você deve definir o valor do PrunemodifiedRecords como verdadeiro ao criar o Store EX:
var stote = new Ext.data.SimpleStore({
fields: [],
data: [],
pruneModifiedRecords: true
})
Outras dicas
store.load();
//remove function will delete specific record.
store.remove(store.findRecord("item_id","1"));
store.sync();
Eu acho que o link a seguir pode ajudá -lo com uma maneira fácil de lidar com a loja
No topo da minha cabeça, não consigo ver por que seu código estaria funcionando dessa maneira, pois parece estar correto. Você já usou o Firebug para definir um ponto de interrupção e passar pelo processo?