Фильтр rallygrid по выбору тега

У меня есть объект rallygrid и объект rallytagpicker. Что я хотел бы сделать, так это отфильтровать rallygrid, чтобы включить только элементы, которые включают любой из выбранных тегов. Я пробовал несколько разных способов сделать это, но я не могу заставить его работать. Вот мой код для тегпикера:

this.tagPicker = this.add({
    xtype: 'rallytagpicker',
    autoExpand: true,
    listeners: {
        select: this._onTagSelect,
        scope: this
    }
});

Итак, первая проблема, с которой я столкнулся, заключается в том, что select на самом деле не срабатывает, когда я выбираю тег из раскрывающегося списка, а во-вторых, как только он срабатывает, как я могу обновить фильтр на сетка для включения элементов с этим новым тегом?

Сейчас я фильтрую, используя объекты фильтра, подобные следующему:

{ property: 'Tags.Name', operator: 'contains', value: 'My Tag' }

Было бы неплохо, если бы я мог хранить все теги для фильтрации в массиве и передавать весь массив сразу, а не иметь отдельный объект фильтра для каждого тега. Это возможно?


person Conner Reeves    schedule 26.07.2012    source источник


Ответы (1)


Что, если вместо этого использовать событие изменения?

Чтобы создать фильтры, вы захотите использовать их вместе для каждого тега:

Rally.data.QueryFilter.or([
    {
        property: 'Tags.Name',
        operator: '='
        value: 'My Tag'
    },
    {
        property: 'Tags.Name',
        operator: '='
        value: 'My Tag2'
    },
]);

Затем, чтобы обновить сетку, вы можете использовать ее метод обновления, передав новые фильтры:

grid.refresh({
    filters: [
        //filters here
    ]
});
person Kyle Morse    schedule 30.07.2012
comment
Похоже, это не работает, потому что Rally.data.QueryFilter.or использует один объект QueryFilter для объединения с другим, а не с их массивом. Есть ли способ объединить несколько объектов QueryFilter, не вызывая каждый из них? На самом деле идея состоит в том, чтобы просто изменить параметр в storeConfig, чтобы фильтры по умолчанию использовали ИЛИ для фильтров вместе вместо И. - person Conner Reeves; 09.08.2012
comment
Код выше должен работать. Rally.data.QueryFilter имеет статические и/или методы для объединения массива фильтров запросов в один фильтр. Похоже, что они почему-то отсутствуют в документах. Я скоро это исправлю. - person Kyle Morse; 10.08.2012
comment
Это говорит мне, что Rally.data.QueryFilter.or не является функцией при попытке использовать ваш код выше. Любые идеи? - person Conner Reeves; 18.08.2012
comment
Вы правы, я отправлю дефект, чтобы реализовать это. У нас это было в 1.x SDK, и, по-видимому, оно так и не было преобразовано. Извините за погоню за гусями. Тем временем вам придется просто вручную перебрать массив фильтров и соединить их вместе, используя метод экземпляра or. - person Kyle Morse; 20.08.2012