2

我的 GridPanel 中有一堆来自商店的 RowIndexes。我想从我的商店中删除这些。如果我只有一个,没问题,来自网格的视图是 refresehd 并且唯一的条目是离开。

但是当我有超过 0ne 时,例如 10 个 RowIndexes,我会像这里一样在循环中创建它......

for(rowIndex in indexes)
 {
    store.removeAt(indexes[rowIndex]);
 }

...只有少数条目从网格中删除。我觉得循环太快了?我已经超时了,但也不起作用。有没有人有想法?谢谢!!!

4

3 回答 3

7

我会尝试以相反的顺序删除行。你试过吗?就像是

var i = indexes.length - 1;
for (; i >= 0; i--){
   store.removeAt(indexes[i]);
}
于 2013-09-27T06:48:27.377 回答
4

我知道答案已经被接受,但我想我会补充一点,每次调用该方法时,调用Ext.data.Store#removeAt每个索引都会触发一个datachanged事件。如果您有datachanged监听器,您可能会遇到性能问题或意外行为。因为removeAt(index)只是一个方便的别名,remove(getAt(index))您可以这样做。

function batchRemoveAt(store, indexes) {
    var records = Ext.Array.map(indexes, function (index) {
        return store.getAt(index);
    });
    store.remove(records);
}

这将触发datachanged整个删除的单个事件,以及删除remove的每条记录的单个事件。

于 2013-09-30T14:59:15.890 回答
0

尝试调用removewhich storeacceps 模型实例或要删除的实例数组或要从中删除记录的索引数组的方法。

store.remove([1,2,3]);

检查文档

于 2013-09-26T13:19:55.943 回答