2015-05-13 4 views
0

У меня очень странная проблема с удаленным магазином Wich выглядит следующим образом:Extjs 4,2 удаленный фильтр на выпадающем списке

магазин:

Ext.define('freetextOrder.store.Attachment', { 
    extend: 'Ext.data.Store', 
    model: 'freetextOrder.model.Attachment', 
    autoLoad: false, 
    proxy: { 
     actionMethods: { 
      create: "POST", 
      read: "POST", 
      update: "POST", 
      destroy: "POST" 
     }, 
     type: 'ajax', 
     filterParam: 'filter', 
     remoteFilter: true, 
     autoSync: true, 
     api: { 
      read: 'ajax/Attachment/Cartarticle/Init', 
      update: 'ajax/Attachment/Cartarticle/Update', 
      create: 'ajax/Attachment/Cartarticle/Create', 
      destroy: 'ajax/Attachment/Cartarticle/Destroy' 
     }, 
     reader: { 
      type: 'json', 
      root: 'results', 
      successProperty: 'success' 
     }, 
     writer: { 
      type: 'json', 
      allowSingle: false 
     }, 
     extraParams: {sid: config.sid} 
    }, 
    listeners: { 
     datachanged: function (store) { 

      if (Ext.getCmp('attachmentGrid')) 
       if (store.getCount() > 0) { 
        Ext.getCmp('attachmentGrid').show(); 
       } else { 
        Ext.getCmp('attachmentGrid').hide(); 
       } 
     } 
    } 
}); 

модель:

Ext.define('freetextOrder.model.Attachment', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'id', type: 'int'}, 
     {name: 'cartarticle_id', type: 'int'}, 
     {name: 'orig_filename', type: 'string'}, 
     {name: 'upload_time', type: 'date'} 
    ] 

}); 

И моя миссия невыполнима, загрузить фильтр из магазина:

{ 
      xtype: 'combobox', 
      queryMode: 'local', 
      mode: 'local', 
      fieldLabel: 'template', 
      id: 'attachmentTemplate', 
      name: 'test', 
      store: Ext.create('freetextOrder.store.Attachment'), 
      valueField: 'cartarticle_id', 
      displayField: 'orig_filename', 
      lazyInit: false, 
      editable: true, 
      invalidCls: '', 
      listeners: { 
       afterrender: function() { 
        var combo = Ext.getCmp('attachmentTemplate') 

        combo.getStore().clearFilter(true); 
        combo.getStore().addFilter({property: 'id', value: config.options.attTemplateIds}); 
        combo.getStore().load(); 

        console.log(combo.getStore().getById(49)); 
       } 
      } 
     } 

Проблема - это событие, которое я пытаюсь использовать, я пробовал все, чтобы черт возьми загружать элементы магазина, но он просто не сдвинется с места.

Консоль.log (combo.getStore(). GetById (49)); возвращает объект, чтобы хранилище было загружено. но somhow он не загружается в опционы выпадающего это сам ....

Wierd ЧАСТЬ IS:

Когда я перейти на страницу и выполнить код в хромированном COMAND строке:

    var combo = Ext.getCmp('attachmentTemplate') 

        combo.getStore().clearFilter(true); 
        combo.getStore().addFilter({property: 'id', value: config.options.attTemplateIds}); 
        combo.getStore().load(); 

Параметры загружаются. Я нахожусь на конце своей веревки. Мне нужно пройти через config.options.attTemplateIds к фильтру. tht является единственным требованием. и значение tht доступно только в том случае, когда определяется xtype: 'combobox'.

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

+1

Почему у вас есть запросMode: local? Вы пытались его удалить? – gabuh

+1

Изменить 'queryMode: 'local'' на' queryMode:' remote'' –

+0

Уже пробовал это. нет эффекта. Единственное, что он делает, это сделать нагрузку медленнее. но все же данные не показывались. – Sangoku

ответ

0

Как я столкнулся с этим вопросом после года и потратил впустую СНОВА 4 часа, пытаясь заставить его работать, без успеха ... и после того, как я запомнил обходное решение .. им отправил его для использования другими.

Вы можете использовать дополнительные параметры для вашей фильтрации. Просто нужно сделать что-нибудь подобное

var store = Ext.getStore('xxxx'); 
    store.getProxy().setExtraParam("xxx", newValue); 
    store.load(); 
0

Есть две вещи или события: первый - это combo's afterRender, второй - загрузка магазина;

combo.getStore(). GetById (49) должен использовать после второго события; но вы поместили его в comRo, после чего данные хранилища еще не были!

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