Extjs - удалить недавно добавленный выбранный элемент из магазина

StackOverflow https://stackoverflow.com/questions/1211496

  •  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();

Я думаю, что следующая ссылка поможет вам легко справиться с магазином

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

Вдобавок ко всему, я не могу понять, почему ваш код будет работать так, как он кажется правильным. Вы использовали Firebug для установки точки останова и пошагового выполнения процесса?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top