从ExtJS存储中删除数组中存在的记录

时间:2014-08-13 10:52:11

标签: extjs extjs4.2

我有一个商店和一个数组。如果该记录的值与数组中的值匹配,我想从商店中删除记录。以下是我正在尝试的代码,但它不起作用。任何人都可以建议正确的方法吗?

'存储'是实际商店和' filterItems'是我要从' store'。

中删除的记录数组
    store.each(function (record) {
        for (var i = 0; i < filterItems.length; i++) {
            if (record.get('ItemId') === _filterItems[i].get('ItemId')) {
                itemIndex = store.data.indexOf(record);
                store.removeAt(itemIndex );
            }
        }
    });

3 个答案:

答案 0 :(得分:2)

不确定您的代码,因为我不知道所有变量。虽然建议使用store.getRange()fn并通过for循环遍历数组。它的性能更好。

var storeItems = store.getRange(),
    i = 0;

for(; i<storeItems.length; i++){     
   if(Ext.Array.contains(filterItemIds, storeItems[i].get('id')))
      store.remove(store.getById(storeItems[i].get('id')));            
} 

这是我现在尝试的一个例子,效果很好。

https://fiddle.sencha.com/#fiddle/8r2

答案 1 :(得分:1)

尝试使用商店的移除方法(docs

store.remove(filterItems);

答案 2 :(得分:1)

    var indexes = [], i = 0;
    dataviewStore.each(function(item, index){
        if(item) {
            if(item.data.columnId == columnId) {
                indexes[i++] = index;
            }
        }
    }, this);

    dataviewStore.remove(indexes);

这是我的示例,如果您的记录与值匹配,则在存储所有项目的索引并删除它们之后存储该项目的索引。 否则你必须使用for循环并从数组的末尾删除它们。