我正在尝试通过一个有一个值数组的字段来筛选dstore集合。我的json数据看起来如下(简化):
[{
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'}]
}]我可以对用户名字段做一个简单的过滤器,它工作得很好。
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()方法具有以下签名:(值、必需、对象、键),但这对我没有多大帮助。
如有任何指导,将不胜感激。提前感谢!
发布于 2018-06-07 04:43:15
您可以找到有关过滤这里的文档。
在您的示例中,.contains()将无法工作,因为它的作用是处理数组类型的值。这里要过滤的是对象数组。以下是doc链接的引用:
包含:对象的筛选器,其中指定的属性值是数组,数组包含等于提供值或满足所提供表达式的任何值。
在我看来,这里最好的方法是覆盖要按团队名称进行筛选的filter方法。下面是一些示例代码:
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上应用复杂过滤的最简单方法。
https://stackoverflow.com/questions/50729458
复制相似问题