Extjs - удалить недавно добавленный выбранный элемент из магазина
-
06-07-2019 - |
Вопрос
Я должен удалить выбранный элемент в сетке редактора. Сначала загружается хранилище, и пользователь может добавить или удалить пустые строки в этой сетке, которые они затем могут редактировать. Проблема не в удалении исходных записей, загруженных из магазина. Проблема возникает, когда я добавляю дополнительную строку, редактирую ее и затем выбираю ее удаление (пользователь может решить, что эта строка ему вообще не нужна).
Кажется, что когда я хотел бы сохранить изменения с помощью store.getModifiedRecords, он по-прежнему видит удаленную строку и обрабатывает ее. Вот кнопка удаления:
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 }
Решение
Вот как работает store.getModifiedRecords (). Измененные записи записей хранятся в массиве, называемом модифицированным в хранилище объекта. При удалении элемента из магазина он не удаляется по умолчанию.
Вот фактическое удаление () из магазина
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);
}
Это означает, что элемент удаляется из измененного списка, только если вы указали значение параметра pruneModifiedRecords как true. По умолчанию это значение равно false, как указано в API хранилища.
Если вы хотите, чтобы новый добавленный элемент был удален из измененного списка, вы должны установить значение pruneModifiedRecords как true при создании хранилища. Пример:
var stote = new Ext.data.SimpleStore({
fields: [],
data: [],
pruneModifiedRecords: true
})
Другие советы
store.load();
//remove function will delete specific record.
store.remove(store.findRecord("item_id","1"));
store.sync();
Я думаю, что следующая ссылка поможет вам легко справиться с магазином
Вдобавок ко всему, я не могу понять, почему ваш код будет работать так, как он кажется правильным. Вы использовали Firebug для установки точки останова и пошагового выполнения процесса?