什么是从存储中删除多个记录的最佳方法?ExtJS

4
什么是extjs中根据条件删除多条记录的最佳方法?
例如:
var store = Ext.create('Ext.data.Store', {
    data: [
        {name: 'Ed', age: 21},
        {name: 'Tommy', age: 15},
        {name: 'Aaron', age: 18},
        {name: 'John', age: 22}
    ]
});

我希望删除'age'小于20岁的记录(在本例中是'Tommy'和'Aaron')。这个问题可以与如何查找符合条件的多条记录相同。
4个回答

7

只使用公共API,并记住您可能不想直接过滤存储或逐个删除项目,因为这将在任何连接的UI组件上触发不必要的重绘 - 您可以使用以下内容:

var subCollection = store.getData().createFiltered(function(item){
    return item.get('age') < 20;
});

store.remove(subCollection.getRange());

这正是我想做的。但是,Store#getData和Collection#createFiltered只有在ext 5之后才可用。 - Kohei Mikami
1
@KoheiMikami 对不起,我错过了Ext-4标签 - 我想你可以通过使用store.getRangeExt.Array.filter来模仿相同的行为以实现向后兼容性。 - Emissary

4
store.remove(
    store.queryBy(function(record) {
        ...
    }).getRange()
)

适用于4、5和6版本。


2
您可能不需要使用removeAll,而只需迭代并删除匹配的内容。
for ( var i = store.data.length; i--; ) {
    if ( store.data[i].age > 20 ) store.removeAt(i);
}

我不想使用removeAll。这可能是因为如果在迭代过程中删除记录,则索引也会更改。但是,我想要的是您代码的基本思路。 - Kohei Mikami

0

另一种方法:

// get records..

        records.forEach(function (record) {
            if (record.getData().age < 20) {
                store.remove(record);
            }
        });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接