【问题标题】:Removing records that exist in an array from ExtJS store从 ExtJS 存储中删除数组中存在的记录
【发布时间】:2014-08-13 10:52:11
【问题描述】:

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

'store' 是实际的 store,'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 );
            }
        }
    });

【问题讨论】:

    标签: extjs extjs4.2


    【解决方案1】:

    不确定您的代码,因为我不知道所有变量。虽然它建议使用 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

    【讨论】:

    • getRange() 返回的数组中元素的索引似乎与商店中的索引不同?因为如果你这样做 store.removeAt(i) 它并不总是删除正确的。
    【解决方案2】:

    尝试使用store的remove方法(docs)

    store.remove(filterItems);
    

    【讨论】:

      【解决方案3】:
          var indexes = [], i = 0;
          dataviewStore.each(function(item, index){
              if(item) {
                  if(item.data.columnId == columnId) {
                      indexes[i++] = index;
                  }
              }
          }, this);
      
          dataviewStore.remove(indexes);
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-20
        • 1970-01-01
        • 2019-08-10
        相关资源
        最近更新 更多