2013-04-23 39 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