Фильтрация коллекции dstore по полю массива - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь отфильтровать коллекцию 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'))
));

Как, однако, я могусоздайте фильтр, чтобы показать мне только тех игроков, которые играют за Red Sox, например.Я пытался использовать метод filter.contains (), но я не могу найти адекватную документацию о том, как он работает.Глядя на код dstore, я вижу, что метод filter.contains () имеет следующую сигнатуру: (значение, обязательный, объект, ключ), но это мне мало помогает.

Любое руководство будет высоко оценено,Заранее спасибо!

1 Ответ

0 голосов
/ 07 июня 2018

Документацию по фильтрации можно найти здесь .

В вашем случае .contains() не будет работать, поскольку он предназначен для работы со значениями типа массива.Здесь вы хотите отфильтровать массив объектов.Вот цитата из ссылки на документ:

содержит: Фильтры для объектов, в которых значение указанного свойства является массивом, а массив содержит любое значение, равное предоставленному значению или удовлетворяющее предоставленному выражению.

На мой взгляд, лучший способ здесь - переопределить метод фильтра, если вы хотите фильтровать по имени команды.Вот пример кода:

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.

Некоторые похожие вопросы, которые вы, возможно, захотите прочитать: ссылка , ссылка , ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...