9

我必须在选项卡上加载第一个网格面板,然后使用工作正常的 loadData() 函数将数据加载到存储中,但现在我必须将无限网格滚动与其集成。

有什么方法可以在 loadData 到 store 之后动态集成无限滚动..?我正在使用 ExtJS 4.1。请帮帮我。在这里,我在控制器和手柄视图面板中显示了我当前的脚本,我在其中尝试过但无法正常工作。

控制器脚本如下:

var c = this.getApplication().getController('Main'),
    data = c.generateReportGridConfiguration(response,true),
    tabParams = {
        title: 'Generated Report', 
        closable: true, 
        iconCls: 'view', 
        widget: 'generatedReportGrid', 
        layout: 'fit', 
        gridConfig: data
    },
    generatedReportGrid = this.addTab(tabParams);

generatedReportGrid.getStore().loadData(data.data);

在上面的脚本中,一旦我得到 Ajax 调用响应,使用 tabParams 添加网格面板并使用 gridConfig 参数传递数据,这些参数将为网格设置字段和列,然后最后一条语句将网格数据提供给网格。我通过以下参考示例尝试了网格面板设置:http: //dev.sencha.com/deploy/ext-4.0.1/examples/grid/infinite-scroll.html

在上面的页面上,包含的脚本 => http://dev.sencha.com/deploy/ext-4.0.1/examples/grid/infinite-scroll.js

我的网格面板脚本如下:

    Ext.define('ReportsBuilder.view.GeneratedReportGrid', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.generatedReportGrid',
     requires: [
        'ReportsBuilder.view.GenerateViewToolbar',
        'Ext.grid.*',
        'Ext.data.*',
        'Ext.util.*',
        'Ext.grid.PagingScroller',
        'Ext.grid.RowNumberer',    
    ],
    initComponent: function() {
         Ext.define('Report', {extend: 'Ext.data.Model', fields: this.gridConfig.fields, idProperty: 'rowid'}); 

         var myStore = Ext.create('Ext.data.Store', {model: 'Report', groupField: 'name',

           // allow the grid to interact with the paging scroller by buffering
              buffered: true,
              pageSize: 100,
              autoSync: true,
              extraParams: { total: 50000 },
              purgePageCount: 0,
              proxy: { 
                  type: 'ajax',
                  data: {},
                  extraParams: {
                       total: 50000
                  },
                  reader: {
                      root: 'data',
                      totalProperty: 'totalCount'
                  },
                 // sends single sort as multi parameter
                 simpleSortMode: true
              }
         });   
       Ext.apply(this, {
                dockedItems: [
                    {xtype: 'generateviewToolbar'}
                ],
                store: myStore,
                width:700,
                height:500,
                scroll: 'vertical',
                loadMask: true,
                verticalScroller:'paginggridscroller',
                invalidateScrollerOnRefresh: false,
                viewConfig: {
                    trackOver: false,
                    emptyText: [
                        '<div class="empty-workspace-bg">',
                        '<div class="empty-workspace-vertical-block-message">There are no results for provided conditions</div>',
                        '<div class="empty-workspace-vertical-block-message-helper"></div>',
                        '</div>'
                    ].join('')
                },
                columns:  this.gridConfig.columns,
                features: [
                    {ftype: 'groupingsummary', groupHeaderTpl: '{name} ({rows.length} Record{[values.rows.length > 1 ? "s" : ""]})', enableGroupingMenu: false}
                ],
                renderTo: Ext.getBody()
        });
     // trigger the data store load
     myStore.guaranteeRange(0, 99); 
     this.callParent(arguments);
   }
});

我还处理了来自服务器端查询的启动和限制,但它不会在刚刚触发的滚动上发送 ajax 请求,因为网格中的 pageSize 属性为 100,并且保证范围函数调用参数为 0,99,如果我将增加 0,299,那么它将被触发一次调用三个 ajax (0,100)、(100,200) 和 (200,300),但仅在网格上显示第一个 ajax 调用的数据,而不是在垂直滚动时触发。

因为,我是 ExtJs 的新手,所以请帮帮我...非常感谢..提前。

4

1 回答 1

1

您不能store.loadData使用远程/缓冲存储和网格实现调用并期望网格反映这些新数据。

相反,您必须调用store.load.

示例 1,缓冲存储使用store.load

此示例显示store.on("load")事件触发。

http://codepen.io/anon/pen/XJeNQe?editors=001

;(function(Ext) {
  Ext.onReady(function() {
    console.log("Ext.onReady")

    var store = Ext.create("Ext.data.Store", {
      fields: ["id", "name"]
      ,buffered: true
      ,pageSize: 100
      ,proxy: {
        type: 'rest'
        ,url: '/anon/pen/azLBeY.js'
        reader: {
          type: 'json'
        }
      }
    })
    store.on("load", function(component, records) {
      console.log("store.load")
      console.log("records:")
      console.log(records)
    })

    var grid = new Ext.create("Ext.grid.Panel", {
      requires: ['Ext.grid.plugin.BufferedRenderer']
      ,plugins: {
        ptype: 'bufferedrenderer'
      }
      ,title: "people"
      ,height: 200
      ,loadMask: true
      ,store: store
      ,columns: [
        {text: "id", dataIndex: "id"}
        ,{text: "name", dataIndex: "name"}
      ]
    })
    grid.on("afterrender", function(component) {
      console.log("grid.afterrender")
    })
    grid.render(Ext.getBody())    

    store.load()
  })
})(Ext)

示例2,静态存储使用store.loadData

您可以从这个示例中看到该store.on("load")事件永远不会触发。

http://codepen.io/anon/pen/XJeNQe?editors=001

;(function(Ext) {
  Ext.onReady(function() {
    console.log("Ext.onReady")

    var store = Ext.create("Ext.data.Store", {
      fields: ["id", "name"]
      ,proxy: {
        type: 'rest'
        ,reader: {
          type: 'json'
        }
      }
    })
    store.on("load", function(component, records) {
      console.log("store.load")
      console.log("records:")
      console.log(records)
    })

    var grid = new Ext.create("Ext.grid.Panel", {
      title: "people"
      ,height: 200
      ,store: store
      ,loadMask: true
      ,columns: [
        {text: "id", dataIndex: "id"}
        ,{text: "name", dataIndex: "name"}
      ]
    })
    grid.on("afterrender", function(component) {
      console.log("grid.afterrender")
    })
    grid.render(Ext.getBody())

    var data = [
      {'id': 1, 'name': 'Vinnie'}
      ,{'id': 2, 'name': 'Johna'}
      ,{'id': 3, 'name': 'Jere'}
      ,{'id': 4, 'name': 'Magdalena'}
      ,{'id': 5, 'name': 'Euna'}
      ,{'id': 6, 'name': 'Mikki'}
      ,{'id': 7, 'name': 'Obdulia'}
      ,{'id': 8, 'name': 'Elvina'}
      ,{'id': 9, 'name': 'Dick'}
      ,{'id': 10, 'name': 'Beverly'}
    ]

    store.loadData(data)
  })
})(Ext)
于 2015-02-02T16:58:24.110 回答