【问题标题】:How to apply multiple filters on a dstore?如何在 dstore 上应用多个过滤器?
【发布时间】:2015-12-14 12:36:06
【问题描述】:

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

另一个问题,在我的dstore 的记录中,也有一个数组(由颜色组成)。我想根据用户选择的颜色过滤结果。我面临的问题是dstore.filter() 检查值的完全匹配,但如果数组中的一个值与所选值匹配,我想保留记录。如何做到这一点?

【问题讨论】:

    标签: dojo dgrid dstore


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      终于明白了!

      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

      【讨论】:

      • 我认为 eq() 需要一个键和值,例如recordStoreFilter.eq('name', 'Name1') 而不是对象。否则非常有帮助。
      • @Simon:感谢您的指点。你说的对。编辑了答案。
      猜你喜欢
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      相关资源
      最近更新 更多