在网格 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();
我也尝试过关注网格侦听器,但要么我没有获得新的网格排序参数,要么根本没有调用它们:
beforeload
、beforesync
、beforeprefetch
、load
。
参考文献
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的主要内容,如果未能解决你的问题,请参考以下文章