EXTJS 5.0:无限网格滚动不适用于商店中的 extraParams

Posted

技术标签:

【中文标题】EXTJS 5.0:无限网格滚动不适用于商店中的 extraParams【英文标题】:EXTJS 5.0: Infinite Grid scrolling not working with extraParams in store 【发布时间】:2016-01-03 11:03:37 【问题描述】:

我正在使用 ExtJS 5.0.1。我有一个不自动加载的网格。使用 TopBar 中的单击按钮手动加载商店后,网格将接收记录。 我正在尝试在此网格上实现无限滚动。我的商店有额外的参数需要传递到后端才能获取记录。第一个页面加载后,对于第二个页面,没有额外的参数传递给后端。我该如何纠正? 我的店铺如下 ->

Ext.define('MyStore', 
  // extend: 'Ext.data.BufferedStore',
  extend: 'Ext.data.Store',
  model  : 'MyModel',

  remoteSort: true,
  buffered: true,
  leadingBufferZone: 10,
  trailingBufferZone: 10,
  pageSize: 100,

  proxy: 
    type  : 'rest',
    format: 'json',
    url   : '/myApp/list',
    extraParams: 
      fromDate: '',
      toDate: ''
    ,
    reader: 
      type: 'json',
      rootProperty: 'data',
      totalProperty: 'totalCount'
    
  
);

我的网格如下-->

Ext.define('MyGridl', 
    extend: 'Ext.grid.Panel',
    requires: [
    'MyStore'
    ],
    layout: 'fit',
    loadMask: true,
    viewConfig: 
       preserveScrollOnRefresh: true
   ,          
   initComponent: function() 
    this.id = 'myGrid';
    this.store = new MyStore();
    this.callParent(arguments);
,
overflowY: 'auto',
frame: true,
columns: [
    xtype: 'rownumberer',
    width: 50,
    sortable: false
,
    text: 'Column1',
    dataIndex: 'Col1',
    flex: 1
,
    text: 'Column2',
    dataIndex: 'Col2',
    flex: 1

],
plugins: [

    ptype: 'bufferedrenderer',
    trailingBufferZone: 10,
    leadingBufferZone: 10,
    scrollToLoadBuffer: 10

],  
tbar: 
    items: [
        xtype      : 'datefield',
        id         : 'fromDate',
        emptyText: 'Enter From Date',
        listeners : 
            render : function(datefield) 
                datefield.setValue(Ext.Date.add(new Date(), Ext.Date.DAY, -5));
            
        
    ,
        xtype      : 'datefield',
        id         : 'toDate',
        emptyText: 'Enter To Date',
        listeners : 
            render : function(datefield) 
                datefield.setValue(new Date());
            
        
    ,
        xtype: 'button',
        text: 'Filter by Date',                                    
        style: 
            marginLeft: '15px'
        ,
        scope: this,
        handler: function(me)      
            var store = Ext.getStore('myStore'),
            fromDay = me.up().down('#fromDate').getValue(),
            toDay = me.up().down('#toDate').getValue();

            store.removeAll();
            store.load(
                params:
                    fromDate: fromDay,
                    toDate: toDay
                 
            );   
                         

                           
    ]

);

【问题讨论】:

在后端添加总数解决了我加载更多记录的问题。但是当第二页加载时,我无法将额外的参数发送到后端。我该如何解决这个问题? 【参考方案1】:

我通过添加解决了这个问题

store.removeAll();
                    store.currentPage = 1;
                    store.getProxy().setExtraParam("fromDate", fromDay);
                    store.getProxy().setExtraParam("toDate", toDay);
                    store.load();  

【讨论】:

以上是关于EXTJS 5.0:无限网格滚动不适用于商店中的 extraParams的主要内容,如果未能解决你的问题,请参考以下文章

IsInViewport 不适用于 Ajax 无限滚动

extjs 6现代组合框,无限滚动

从单个商店动态创建多个 Sencha ExtJS 商店

行编辑插件上的 Extjs4 无限滚动分页

用于网格面板的 extjs 3.2 水平滚动条

ExtJS:: 如何过滤网格中的行,但不在存储中