Комбинированный фильтр Ext Js по отдельным элементам

#javascript #extjs #combobox #filter #datastore

#javascript #extjs #combobox #Фильтр #хранилище данных

Вопрос:

У меня есть два требования для привязки EXT Js combo

— Первый элемент в списке должен содержать фиксированный текст, такой как «Unfilterd»

— После этого мне нужно привязать хранилище данных к вышеупомянутой комбинации. В хранилище данных были изменены значения столбцов, так как же отфильтровать хранилище данных, чтобы в нем были разные строки в столбце, прежде чем привязывать комбо.

Примечание:

Я также использую хранилище данных для привязки панели grid, я не хочу создавать еще один вызов к базе данных. Вот почему я ищу решение для фильтрации данных по внешнему хранилищу данных Js.

Мой пример кода выглядит следующим образом

 extManager1.comboFilter = new Ext.form.ComboBox({
                  editable: false
                , id: 'BaseTemplate'
                , fieldLabel: 'Base Templates'
                , name: 'BaseTemplate'
                , editable: false
                , store: extManager1.GetTemplateDetails
                , displayField:'FilterBy'
                , valueField: 'value'
                , mode: 'local'
                , boxLabel: 'BaseTemplate'
                , typeAhead: true
                , triggerAction: 'all'
                , forceSelection: true
                , selectOnFocus: true
                , emptyText:'Unfilterd'
                ,listeners:{select:{fn:function(combo, value) { 

                //This code filters the grid panel data by selected combo value
                Ext.getCmp('TemplateGridPanel').store.filter('productdisplayheading', combo.getValue());               

                }}

                }

    });
  

Ответ №1:

Вероятно, вам потребуется создать другой объект хранилища с нужным вам содержимым. Но нет необходимости повторно извлекать данные из базы данных — вы можете заполнить новое хранилище данными из вашего extManager1.GetTemplateDetails хранилища. Взгляните на метод collect в ExtJS Store — его можно использовать для извлечения различных значений из существующего хранилища.

Комментарии:

1. Спасибо за ответ. Но как я могу отличить значение, отличное от предыдущего

2. Я не уверен, как использовать метод collect, не могли бы вы, пожалуйста, привести пример. Мне также нужно добавить первый элемент как ‘Unfilterd’ для комбинации, как я могу этого добиться.

3. Вы можете использовать store.insert(0, [yourUnfilteredRecord]) для добавления «нефильтрованного» элемента в хранилище. И store.collect('columnA') возвращает различные значения из столбца хранилища.