Extjs - 从商店中删除新添加的选定项目

Posted

技术标签:

【中文标题】Extjs - 从商店中删除新添加的选定项目【英文标题】:Extjs - Remove newly added selected item from store 【发布时间】:2009-07-31 09:16:19 【问题描述】:

我必须删除编辑器网格中的选定项目。首先加载商店,用户可以选择在此网格中添加或删除空白行,然后他们可以对其进行编辑。问题不在于删除从商店加载的初始记录。当我添加一个额外的行,编辑它然后选择删除它时,问题就出现了(用户可能决定他根本不需要这一行)。

似乎当我想使用 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             

【问题讨论】:

只是一个更新.. 仍然不确定为什么会这样,但我所做的是在提出请求之前,检查删除列表中是否有任何项目匹配并将它们从请求列表中删除。 【参考方案1】:

这就是 store.getModifiedRecords() 的工作方式。修改后的记录存储在一个名为 modified in store 对象的数组中。当您从商店中移除商品时,默认情况下它不会被移除。

这是从 store 中实际的 remove()

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 时,才会从修改列表中删除该项目。如 Store API 中所述,此值默认为 false。

如果你想从修改列表中删除新添加的项目,你必须在创建商店时将 pruneModifiedRecords 的值设置为 true 例如:

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

【讨论】:

【参考方案2】:
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/

【讨论】:

【参考方案3】:

在我的脑海中,我不明白为什么您的代码会以这种方式工作,因为它似乎是正确的。您是否使用 Firebug 设置断点并逐步执行该过程?

【讨论】:

以上是关于Extjs - 从商店中删除新添加的选定项目的主要内容,如果未能解决你的问题,请参考以下文章

从 ExtJs 4.1 存储中删除记录时会触发哪些事件

ExtJS 4:使用代理加载的数据存储显示 0 长度

ExtJs Gridpanel 存储刷新

如何删除商店extjs中的重复值

ExtJS4 内存泄漏

Extjs 无法在表单面板中动态添加/删除字段