我一直在寻找它很长时间,并且(从我自己的角度来看)这是很久以前应该完成的基本行为:您按列对网格进行排序,例如“ NAME
”,你修改一条记录,名字“ AAA
”变成“ ZZZ
”,它被发送到服务器,服务器用“”回答“ok”,ZZZ
所以值被更新但保持在同一个地方,即排序顺序没有被刷新。
有没有办法自动做到这一点?哪个事件,哪个代码?如何?
一旦从服务器获得“ok”,就可以显式调用 store 方法。就像是:
myStore.sort("name","ASC");
或者,如果您有一组排序列,则可以使用sorters
商店提供的属性。喜欢:
myStore.sort(myStore.sorters); // this uses the existing sorting rules applied to the store
希望这可以帮助。
我在Sencha 的论坛上问过,这是历史上第一次我在 stackoverflow 上得到了答案。因此,为了分享答案,这是我的有效代码:
Ext.define('Ext.data.StoreHandleErrors', {
extend: 'Ext.data.Store',
alias: 'data.storehandleerrors',
constructor: function(config) {
this.callParent([config]);
this.on(
'write',
function(me, opts) {
this.sort();
},
this
);
}
});
说明:我重写了构造函数,以便每次调用“写入”事件,即每次将记录发送到服务器时,都会重新排序存储,以便我们始终确保它已正确刷新。这是一种通用方法,可能“太多”(= 无需为每次写入再次重新排序)但(1)它适用于所有商店(2)无需像 Abdel 建议的那样制作自定义硬编码的东西(尽管 Abdel 的答案可能更适合在特定的代码中只使用一次)。