2013-04-23 3 views
4

У нас есть v4.1 выпадающий ExtJS, и мы обязаны его в магазин и установить его PAGESIZE конфигурацию следующим образом:Как решить проблему с ExtJS 4.1 Combobox pageSize?

var myStore = Ext.create('Ext.data.Store', { 
    model: 'User', 
    remoteFilter: true, 
    remotePaging: true, 
    autoLoad: true 
    proxy: { 
     type: 'ajax', 
     url: '/users.json', 
     reader: { 
      type: 'json', 
      root: 'users' 
     } 
    }, 
    pageSize: 50,     // <= store pageSize 
}); 

Ext.create('Ext.form.ComboBox', { 
    fieldLabel: 'Choose', 
    store: myStore, 
    queryMode: 'remote', 
    displayField: 'Name', 
    valueField: 'Id', 
    pageSize: 20     // <= combobo pageSize 
}); 

Как documentation sayspageSize свойства выпадающего список следует использовать для фильтрации запросов AJAX отправляемых сервер, когда queryMode='remote'. Но то, что мы видим, противоположно, и оно используется только для показа панели инструментов пейджинга в нижней части выпадающего списка (в первом комментарии к документации указано так).

Но в этом конкретном случае нам необходимо переопределить свойство магазина pageSize и присвоить свойство combobox pageSize для фильтрации запроса ajax.

Как мы можем реализовать/расширить такую ​​функцию в combobox? Как мы можем переопределить свойство pageSize магазина в combobox?

ответ

3

pageSize в comboBox на самом деле является истинным/ложным значением, несмотря на документацию.

В javascript, если это 0, панель пейджинга выключена, иначе она включена.

Это общий магазин, или это только для combobox?

Если совместно, то вы хотите сохранить размер страницы магазина, изменить его для комбо, когда это необходимо, а затем установить его снова:

  { 
       xtype: 'combobox', 
       width: 350, 
       store: new MyStore(), 
       fieldLabel: 'Label', 
       pageSize: 2, 
       listeners:{ 
        beforequery:function(queryEvent){ 
         var combo = queryEvent.combo; 
         var store = combo.getStore(); 
         var oldPageSize = store.pageSize; 
         store.on('load', function(){ 
          this.pageSize = oldPageSize; 
         }); 
         store.pageSize = combo.pageSize; 
        } 
       } 
      } 
+0

спасибо neil, отличная идея. Я решил только для не-общего магазина, переопределив его магазин. но ваше решение работает как для общего, так и для не-хранилища, я думаю. я прав? –

+0

должен работать как для да –

1

Другой способ сделать эту работу, добавьте параметр/config в хранилище при создании экземпляра. Вот как я это делаю

store: new Ext.create('MyStore',{pageSize:20}), 
pageSize: true 
+0

спасибо, но когда мы используем sencha mvc в combo config, мы просто пишем имя магазина и не создаем его. у вас есть какое-то решение? –

+0

Да, я также использую Sencha MVC. Если у вас есть 'Store', например' Ext.define ('MyCompany.store.MyStore', {...}) '. Мы могли бы написать в хранилище 'combo'': new Ext.create ('MyCompany.store.MyStore', {PageSize: 12})' – F1dz

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