在网格 sortchange 事件之前更改存储 extraParams

Posted

技术标签:

【中文标题】在网格 sortchange 事件之前更改存储 extraParams【英文标题】:Changing store extraParams before grid sortchange event 【发布时间】:2013-07-17 13:13:31 【问题描述】:

要求

每次对网格数据进行排序 - 在事件执行之前,我想用新的排序属性的值更改存储 extraParams。就像如果我在 DESC 方向对列 Name 进行排序 - 在事件执行之前我想用 @987654324 覆盖商店的 extraParams @of Name 列和方向属性DESC

我的商店也将remoteSort 属性设置为true

我正在使用 ExtJS 4.2。

问题

我在网格上尝试了sortchange 事件侦听器,但它在调用数据 API 并加载记录后执行。我想要的是像 beforesortchange 这样的东西。

这都是remoteSort : true

下一个问题是,如果我从 sortchange 调用 this.getStore().load();,那么我的数据 api 会被调用两次,这是没有意义的。

代码

网格监听器:

sortchange: function(ct, column, direction, eOpts) 
    this.getStore().getProxy().extraParams = 
        'sort'  : column.dataIndex,
        'dir'   : direction
    
    //  load() will call the data api again once the data loading is over
    //this.getStore().load();

我也尝试过关注网格侦听器,但要么我没有获得新的网格排序参数,要么根本没有调用它们: beforeloadbeforesyncbeforeprefetchload

参考文献

https://***.com/questions/12338407/custom-function-call-after-extjs-4-grid-sort/12338906#12338906

【问题讨论】:

【参考方案1】:

在发送前使用beforeload 事件更改extraParam 对象:

listeners: 
    beforeload: function(store, operation, eOpts)
        if(store.sorters && store.sorters.getCount())
        
            var sorter = store.sorters.getAt(0);
            store.getProxy().extraParams = 
                'sort'  : sorter.property,
                'dir'   : sorter.direction
            ;
        
    

【讨论】:

对,它将排序和分页参数发送到服务器。但sort 参数是数组格式,不是我需要的。我可以访问无法修改的 API,并且需要不同格式的参数(sort=column,dir=asc|desc)。 非常感谢,它确实像一个魅力 :) 但稍有变化,extraParams 是代理的属性,因此 store.extraParams 应该是 store.proxy.extraParams。修改了你的代码。 如果不需要发送排序参数,您可以轻松设置 sortParam: undefined

以上是关于在网格 sortchange 事件之前更改存储 extraParams的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS:检测网格数据更改的网格面板事件是啥

Silverlight- DataGrid 控件 - 选择更改事件干扰排序

剑道网格行选择更改事件?

在 kendo ui 网格更改事件上获取单击的单元格

更改点击事件的网格布局

在下拉选择的索引更改事件上刷新 Kendo UI 网格