2013-04-23 57 views
4

我們有一個ExtJS V4.1組合框,我們已經將其綁定到店,並設置其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 says組合框的pageSize財產應當用於過濾發送到AJAX查詢服務器時爲queryMode='remote'。但是我們看到的卻是相反的情況,它僅用於在組合框底部顯示分頁工具欄(文檔的第一條評論如此)。

但是,在這種特定情況下,我們真正需要的是覆蓋商店的pageSize屬性,並使組合框的pageSize屬性用於過濾ajax請求。

我們如何在ComboBox中實現/擴展這樣的功能?我們如何覆蓋商店中的組合框pageSize

回答

3

儘管存在文檔,但comboBox中的pageSize實際上是true/false值。

在JavaScript中,如果它爲0,則分頁工具欄關閉,否則打開。

這是一個共享商店,還是隻爲組合框?

如果共享的,那麼你將要保存商店的頁面大小,必要時改變它的組合,然後再次將其設置:

  { 
       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

謝謝尼爾,好主意。我解決的是通過覆蓋它的商店來爲非共享商店。但是我認爲你的解決方案適用於共享和非共享商店。我對嗎? – 2013-05-08 04:27:44

+0

應該可以爲 – 2013-05-08 04:51:48

1

另一種方式來完成這項工作,添加參數/配置到實例化商店時。這是我該怎麼做

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

感謝,但是當我們在組合配置上使用sencha mvc時,我們只需寫入商店名稱並且不要實例化它。你有任何解決方案嗎? – 2013-05-13 04:20:48

+0

是的,我也使用Sencha MVC。如果你有'Store',例如'Ext.define('MyCompany.store.MyStore',{...})'。我們可以在'combo'' store中寫入:new Ext.create('MyCompany.store.MyStore',{PageSize:12})' – F1dz 2013-05-14 03:58:52