Dojo 如何在一个数据存储上应用多个筛选器?

Dojo 如何在一个数据存储上应用多个筛选器?,dojo,dgrid,dstore,Dojo,Dgrid,Dstore,假设一个dstore有名字、姓氏和年龄的记录。现在,我想要名为“Name1”或Age=25的记录。如何在dstore中执行此操作? 如果我这样做, recordStore.filter({name:'Name1},{age:25}) 然后返回名称为“Name1”且年龄为25岁的记录 另一个问题,在我的dstore记录中,还有一个数组(由颜色组成)。我想根据用户选择的颜色过滤结果。我面临的问题是dstore.filter()检查值是否完全匹配,但如果数组中有一个值与所选值匹配,我希望保留记录。如何

假设一个
dstore
有名字、姓氏和年龄的记录。现在,我想要名为“Name1”或Age=25的记录。如何在
dstore
中执行此操作? 如果我这样做,
recordStore.filter({name:'Name1},{age:25})
然后返回名称为“Name1”且年龄为25岁的记录


另一个问题,在我的
dstore
记录中,还有一个数组(由颜色组成)。我想根据用户选择的颜色过滤结果。我面临的问题是
dstore.filter()
检查值是否完全匹配,但如果数组中有一个值与所选值匹配,我希望保留记录。如何执行此操作?

您需要像这样扩展过滤器功能:

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

终于明白了

Filter
对象可以从
store
创建,然后用作
store
Filter
方法的参数

用于执行或/和两个查询:

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.

有关更多信息,请参阅。

我认为eq()需要一个键和值,例如recordStoreFilter.eq('name','Name1'),而不是一个对象。否则会很有帮助。@Simon:谢谢你的指点。你是对的。编辑了答案。