Фильтрация магазина для combobox и bindStore

Магазин привязывается к комбинированному списку с помощью bindStore в отдельной функции.

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

  loadMarkers: function(store, value){

    store.filter('markerid',17);

    this.fields.marker.bindStore(store);
    this.fields.marker.setValue(value);
  }

В этом конкретном примере есть два разных способа, которыми я его опробовал - до привязки и после. Console.log в конце показывает отфильтрованное хранилище как для «магазина», так и даже для поля со списком. Но само поле со списком все равно все показывает.

конфигурация combobox:

  marker: new Ext.form.ComboBox({
    fieldLabel: _('Marker'),
    displayField: 'name',
    valueField: 'id',
    mode:'local',
    lastQuery: '',
    store: new Ext.data.JsonStore({
      fields: ['name', 'id', 'markerid'],
      data: [
        {name:_('Default'), id: 0, markerid: 0}
      ]
    })
   })

this.markerStore = new Ext.data.JsonStore({
  autoLoad: true,
  url: 'Api/getMarkers',
  root: 'response',
  sortInfo: {field: 'name', direction: 'ASC'},
  fields: Ext.data.Record.create([
    {name: 'id', type: 'integer'},
    {name: 'name', type: 'string'},
    {name: 'markerid', type: 'integer'}
  ])
});

person Mauro Tamm    schedule 06.01.2015    source источник
comment
Не могли бы вы также показать конфигурацию вашего магазина   -  person Scriptable    schedule 06.01.2015
comment
обновлен конфигурацией магазина   -  person Mauro Tamm    schedule 06.01.2015
comment
какую версию Ext пользуетесь матом? Я отправлю код через минуту   -  person Scriptable    schedule 06.01.2015
comment
ext 3.4 (ext3 в тегах)   -  person Mauro Tamm    schedule 06.01.2015


Ответы (1)


Я предполагаю, что вы используете ExtJs 3.4 для этого ответа из-за формата приведенного выше кода.

Я попытался запустить ваш код напрямую и получил ряд ошибок. Например, _('Default') _() is undefined и из того, что я вижу в документации, ComboBox не имеет функции с именем bindStore Документация ComboBox.

Я переписал код в приведенный ниже код, и он мне подходит. Вам нужно убедиться, что вы применяете фильтр ПОСЛЕ того, как магазин загрузил данные, в моем примере я жду запуска события загрузки.

Ext.onReady(function() {

    Ext.BLANK_IMAGE_URL = '/js/ext-3.4.0/resources/images/default/s.gif';

    var markerStore = new Ext.data.JsonStore({
        autoLoad: true,
        url: 'data/data1.json',
        root: 'rows',
        sortInfo: {field: 'name', direction: 'ASC'},
        fields: [
            {name: 'id', type: 'integer'},
            {name: 'name', type: 'string'},
            {name: 'markerid', type: 'integer'}
        ],
        listeners: {
            'load': function() {
                Ext.getCmp('createformTypeCombo').getStore().filter('markerid', 17);
            }
        }
    });


    var form = new Ext.form.FormPanel({
        renderTo: Ext.getBody(),
        items: [
            new Ext.form.Label({
                text: "form",
                margin: "25 10 25 5"
            }),
            new Ext.form.ComboBox({
                fieldLabel: 'Marker',
                id: 'createformTypeCombo',
                displayField: 'name',
                valueField: 'id',
                mode:'local',
                lastQuery: '',
                store: markerStore
            })
        ]
    });
});
person Scriptable    schedule 06.01.2015
comment
что касается _ ('Default') - можете игнорировать это, удалите _ () - это специальные теги для скриптов перевода. Кроме того, bindStore является частным (по умолчанию в документах он не отображается). Я не могу добавить фильтр к событию загрузки, поскольку окончательное значение фильтра является динамическим и является параметром функции. Хранилище загружается один раз, а затем необходимые результаты фильтруются позже - чтобы избежать лишних запросов к серверу и базе данных. - person Mauro Tamm; 06.01.2015
comment
Хорошо, если вы попытаетесь добавить свои фильтры к событию загрузки, это должно решить вашу проблему, надеюсь. - person Scriptable; 06.01.2015