2015-01-06 6 views
0

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

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

loadMarkers: function(store, value){ 

    store.filter('markerid',17); 

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

Этот конкретный пример имеет два способа сравнения, которые он использовал, - до привязки и после. Console.log в конце показывает отфильтрованное хранилище как для «магазина», так и для combobox. Но сам 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'} 
    ]) 
}); 
+0

Не могли бы вы показать ваш магазин конфигурации слишком – Scriptable

+0

обновляется магазина конфигурации –

+1

какая версия Ext вы используете мат? Я выложу некоторый код в min – Scriptable

ответ

1

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

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

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

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 
      }) 
     ] 
    }); 
}); 
+0

как для _ ('Default') - может игнорировать это, удалить _() - это специальные теги для сценариев перевода. Также bindStore является приватным (документы не показывают его по умолчанию). Я не могу добавить фильтр в событие загрузки, так как окончательное значение фильтра является динамическим и входит в качестве параметра для функции. Магазин загружается один раз, а затем необходимые результаты отфильтровываются позже - чтобы избежать избыточных запросов к серверу и db. –

+0

ok. Если вы попытаетесь добавить фильтры в событие загрузки, это должно устранить вашу проблему, надеюсь. – Scriptable

Смежные вопросы