【问题标题】:How to clear the store and update a paging toolbar?如何清除商店并更新分页工具栏?
【发布时间】:2011-11-18 00:01:12
【问题描述】:

当我单击搜索按钮重新加载具有不同参数的网格存储时,我需要将分页工具栏参数重置为"page""start""limit"

我该怎么做?

问题是,当我在下一页,并且我进行新搜索时,我有参数page=2start=25limit=25 dirty,而不是我需要重置此参数。

我的代码:

listeners: {
    click: function(){
        Ext.getCmp('GrlGio').getStore().removeAll();
        Ext.getCmp('GrlGio').store.load({
                params:{
                  mode: "RIC",
                  DataRicerca: dd,
                  Pit: Ext.getCmp('cmbPiattaforma').getValue()
                }
        });
    }
 }

谢谢!

【问题讨论】:

  • 感谢您提出这个问题。我遇到了类似的问题,这篇文章有帮助!

标签: extjs extjs4


【解决方案1】:

这工作正常(正确刷新分页信息):

    myStore.removeAll();

    myStore.fireEvent('load', myStore, [], {});

【讨论】:

    【解决方案2】:

    必须将页面大小更改为 500 以打印整个存储/网格,并且一旦打印,将网格恢复为原始页面大小 25。

        // 500 records are now in the store and on the grid
        ux.core.grid.Printer.print(this.getOrderList());
        store.pageSize = this.displaySize;   // new page size is 25
        this.getPagingToolbar().doRefresh(); // equivalent of pressing a refresh button on the toolbar
    

    诀窍 - 使用相同的排序器/过滤器/currentPage 重新加载存储

    【讨论】:

      【解决方案3】:

      伙计们 currentPage=1 帮了我的忙

      在每次加载商店之前调用以下 顺便说一句,我得到 500 个结果并加载到缓存中 分页是本地的,在任何新搜索之前你都可以尝试这个

                              var store = Ext.getStore('MyStoreS');
                              store.proxy.extraParams = { employeeId : searchStr};
      
                              store.currentPage = 1;
      
                              store.load();
      

      【讨论】:

        【解决方案4】:

        只需在 removeAll() 之后调用 pagingToolbar.onLoad()。简单明了。

        【讨论】:

          【解决方案5】:

          在你的处理程序中试试这个

          Ext.getCmp('gridpanel').getStore().removeAll();
          Ext.getCmp('PagingToolbar').moveFirst();
          

          在此之后,输入您的搜索查询并相应地加载商店

          Ext.getCmp('gridpanel').getStore().load({params : { start : 0, limit : maxRecords, searchText : _searchText } });
          

          希望对你有帮助

          【讨论】:

            【解决方案6】:

            在 Ext 4 中,我发现 loadPage() 在重置数据存储和使分页工具栏返回到第一页方面效果很好。示例:

            store.loadPage(1) // note: 1-based, not 0-based
            

            【讨论】:

              【解决方案7】:

              我知道这是一篇旧帖子,但我想我会添加我的便士作品。我正在使用 EXTJS 4 并且遇到了类似的问题。当我进行新的搜索时,页码等没有重置。我找到的似乎可以自动与导航栏一起使用的解决方案是使用商店的 currentPage 属性。我的设置确实有点奇怪,但是当我进行新搜索时执行 this.currentPage = 1 对我来说效果很好

              【讨论】:

                【解决方案8】:

                通过覆盖 ext.data.store 定义以下函数 "resetStartParam" :

                Ext.override(Ext.data.Store, {
                
                            resetStartParam:function(){
                
                                //get the latest store options
                                var storeOptions=this.lastOptions;
                
                                if(storeOptions!=undefined){
                
                                    //get the param names
                                    var pn = this.paramNames;
                
                                    //get the params from options
                                    var params=storeOptions.params;
                
                                    //change the param start value to zero
                                    params[pn.start] = 0;
                
                                    //reset options params with this new params
                                    storeOptions.params=params;
                
                                    //apply this new options to store options
                                    this.storeOptions(storeOptions);
                                    }
                                }
                    });
                

                现在点击你的搜索按钮调用这个函数:

                Ext.getCmp('GrlGio').getStore().resetStartParam(); 
                

                就是这样。它应该可以工作。

                【讨论】:

                • 我使用了类似的覆盖并重置 this.pageSize = 10 和 this.currentPage = 1 以获得相同的结果。
                【解决方案9】:

                以下是我通过分页实现搜索的方法。它只执行 1 次请求并刷新分页数据。

                onExecuteSearch: function(){
                  var params = this.getSearchForm().getForm().getFieldValues()
                      , proxy = this.getSomeGrid().getStore().getProxy();
                
                  proxy.extraParams = params;
                  this.getPagingToolbar().moveFirst();
                }
                

                getFieldValues() 文档:http://docs.sencha.com/ext-js/4-0/#!/api/Ext.form.Basic-method-getFieldValues

                有关代理“extraParams”的更多信息,请查看此处:ExtJs4 - Store baseParams config property?

                【讨论】:

                • 嘿@jack - 我看到这个问题已经有几个月了,但您当前选择的答案对我没有帮助。我已经解决了您在重复请求和分页信息未更新时遇到的一些问题。希望这对某人有所帮助。
                • 它帮助了我!只需使用moveFirst() 代替load() 功能...无需手动重置参数。谢谢!
                【解决方案10】:

                您可以手动重置参数

                Ext.getCmp('GrlGio').getStore().getProxy().pageParam =1;
                Ext.getCmp('GrlGio').getStore().getProxy().startParam =0;
                

                然后进行存储加载。我知道它看起来是硬编码的,但这是我找到的唯一解决方案......

                【讨论】:

                • 谢谢!这对我有好处!但是如何刷新 pagingtollbar 信息??
                • 用 pagingToolbar.moveFirst() 我做另一个请求!所以这样,当我点击 serarch 按钮时,我会从服务器获得 2 一次相同的商店
                • ..也许你可以使用分页工具栏的挂起事件来禁用 moveFirst 功能的加载..我希望这会有所帮助..我还没有尝试过
                • 我尝试使用 suspendEvents: true 和 pagingToolbar.moveFirst() 但我在 firebug 中看到了服务器上的两个 rwwquest!
                • 看来 pageParam 是页面参数的名称。默认情况下它是“页面”。这就是为什么你需要指定一个字符串。下面的答案是正确的:store.currentPage = 1。
                【解决方案11】:

                试试这个 -

                pagingToolbar.moveFirst();
                

                【讨论】:

                • 这对我不好,因为我看到在服务器上发送了两个请求!第一个请求是 store.load() ,第二个请求是新参数!我该如何解决?
                猜你喜欢
                • 1970-01-01
                • 2012-09-01
                • 1970-01-01
                • 1970-01-01
                • 2023-03-13
                • 1970-01-01
                • 2016-02-06
                • 2013-03-25
                • 1970-01-01
                相关资源
                最近更新 更多