首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对数组字段筛选dstore集合

对数组字段筛选dstore集合
EN

Stack Overflow用户
提问于 2018-06-06 20:55:45
回答 1查看 176关注 0票数 0

我正在尝试通过一个有一个值数组的字段来筛选dstore集合。我的json数据看起来如下(简化):

代码语言:javascript
复制
[{
    user_id: 1,
    user_name: "John Doe",
    teams: [{team_id: 100, team_name: 'Red Sox'}, {team_id: 101, team_name: 'Buccaneers'}]
},
{
    user_id: 2,
    user_name: "Fred Smith",
    teams: [{team_id: 100, team_name: 'Buccaneers'}, {team_id: 102, team_name: 'Rays'}]
}]

我可以对用户名字段做一个简单的过滤器,它工作得很好。

代码语言:javascript
复制
this.dstoreFilter = new this.dstore.Filter();

var results = this.dgrid.set('collection', this.dstore.filter(
     this.dstoreFilter.match('user_name',new RegExp(searchTerm, 'i'))
));

然而,我如何构造一个过滤器,只向我展示那些为红袜队打球的球员,例如。我尝试过使用filter.contains()方法,但是我找不到关于它是如何工作的足够的文档。查看dstore代码,我发现filter.contains()方法具有以下签名:(值、必需、对象、键),但这对我没有多大帮助。

如有任何指导,将不胜感激。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 04:43:15

您可以找到有关过滤这里的文档。

在您的示例中,.contains()将无法工作,因为它的作用是处理数组类型的值。这里要过滤的是对象数组。以下是doc链接的引用:

包含:对象的筛选器,其中指定的属性值是数组,数组包含等于提供值或满足所提供表达式的任何值。

在我看来,这里最好的方法是覆盖要按团队名称进行筛选的filter方法。下面是一些示例代码:

代码语言:javascript
复制
this.grid.set('collection', this.dstore.filter(lang.hitch(this, function (item) {
    var displayUser = false;
    for(var i=0; i < item.teams.length; i++){
        var team = item.teams[i];
        if(team.team_name == 'Red Sox'){
            displayUser = true;
            break;
        }
    }
    return displayUser;
})));
this.grid.refresh();

对于存储中的每个用户,如果返回false,则它的显示设置为false,如果返回true,则显示它。到目前为止,这是我所知道的在dstore上应用复杂过滤的最简单方法。

一些类似的问题,你可能想读:链接链接链接

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50729458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档