如何判断商店加载了哪个页面

问题描述:

我有一个绑定到网格的商店。当它被加载时,它有n个页面。如何判断商店加载了哪个页面

现在我想显示包含特定值的页面。为了做到这一点,我使用store.load({params: {'file': 'file33939'}});(使用'文件'是因为网格显示文件列表,但它与问题无关)。在这一刻,我不知道它应该是什么页面。答案如下:

{ 
    "files":[{"id":"33939", "name": "file33939"}, /* ... */], 
    "total": 1000, 
    "page": 13 
} 

网格显示正确的数据(真正包含'file33939'的页面)。但分页工具栏,网格的rownumbererstore.indexOfTotal()的行为就好像第一页加载(而不是13)。

我该如何“告诉”商店刚才加载的商店页面是13?

要更改加载的页面,请不要使用store.load()。您应该找到一种方法来获取给定数据的页码(例如,通过ajax请求询问服务器),然后通过pagingtoolbar.move(pageNumber)更新页面。这将更新您的分页工具栏以及网格和商店,并且所有内容都保持同步。

+0

谢谢您的回答。我知道这个解决方案。不过,我只需要使用一个请求就可以完成(由于某些情况)。为了缩小可能的解决方案列表,我应该说通过ajax加载然后使用'store.loadData()'也不是一个选项。以及使用'proxy.directFn'在前端模拟服务器端。无论如何,+1,因为你的回答是正确的。 –

我找到了合适的解决方案。这不是最优雅的解决方案。然而,它的工作。

在煎茶代码挖​​后我发现,pagingtoolbarstore.indexOfTotal()使用record.index(这在我的情况下被设置为,如果第一页已加载)。 record.index由商店功能store.loadRecords设置:

loadRecords: function(records, options) { 
    // ... 
    //FIXME: this is not a good solution. Ed Spencer is totally responsible for this and should be forced to fix it immediately. 
    for (; i < length; i++) { 
     if (options.start !== undefined) { 
      records[i].index = options.start + i; 

     } 
    // ... 
}, 

的FIXME注释是不是我的。它在代码中。

理想的解决方案是找到一个事件,在响应来临之后,loadRecords被调用之前触发,并在处理程序中覆盖options。但是我还没有找到这样的事件。

但你总是可以覆盖loadRecords:

Ext.define('MyApp.store.MyStore', { 
    extend   : 'Ext.data.Store', 
    // ... 
    loadRecords  : function(records, options) { 
     if (this.proxy.reader.rawData.page) { 
      var page = this.proxy.reader.rawData.page; 

      // This is for pagingtoolbar 
      this.currentPage = page; 

      // The following is for rownumberer and correct index behaviour 
      options.page = page; 
      options.start = (page-1)*options.limit; 
     } 
     this.callParent(arguments); 
    }, 
    // ... 
});