dojo 如何在一个数据存储上应用多个过滤器?

jv2fixgn  于 2022-12-16  发布在  Dojo
关注(0)|答案(2)|浏览(148)

假设dstore包含名、姓和年龄的记录。现在,我需要名为“Name1”或年龄= 25的记录。如何在dstore中执行此操作?如果执行此操作,recordStore.filter({name: 'Name1'}, {age: 25});将返回名为“Name1”且年龄=25的记录。
另一个问题是,在我的dstore的记录中,也有一个数组(由颜色组成)。我想根据用户选择的颜色过滤结果。我面临的问题是dstore.filter()检查值的完全匹配,但我想保留记录,即使数组中有一个值与所选值匹配。如何做到这一点?

ulydmbyx

ulydmbyx1#

您需要像这样扩展filter函数:

recordStore.filter( function (object) {
    return object.Name === 'Name1' || object.age === 25;
});
3zwtqj6y

3zwtqj6y2#

终于想通了!
Filter对象可以从store创建,然后用作storefilter方法的参数。
执行两个查询的OR/ AND:

recordStoreFilter= new recordStore.Filter()
name1Filter= recordStoreFilter.eq('name': 'Name1')
age25Filter= recordStoreFilter.eq('age', 25)

unionFilter= recordStoreFilter.or(name1Filter, age25Filter)
intersectionFilter= recordStoreFilter.and(name1Filter, age25Filter)

unionData= recordStore.filter(unionFilter)
intersectionData= recordStore.filter(intersectionFilter)

//Set using the following
recordGrid.set('collection', unionData) //or intersectionData

要匹配数组中的一个值:

colorFilter= recordStoreFilter.contains({'color', 'red'})
colorData= recordStore.filter(colorFilter)
//This will give the records that have color red in the array.

有关详细信息,请参见here

相关问题