我有一个网格商店。用户可以单击标题进行排序。我需要知道商店什么时候开始排序并完成排序。我该附加什么?我看不到商店的开始排序和结束排序事件。
以下是我正在使用的那种:
Ext.override(Ext.data.Store, {
// override
createSortFunction: function (field, direction) {
direction = direction || "ASC";
var directionModifier = direction.toUpperCase() == "DESC" ? -1 : 1;
var sortType = this.fields.get(field).sortType;
//create a comparison function. Takes 2 records, returns 1 if record 1 is greater,
//-1 if record 2 is greater or 0 if they are equal
return function (r1, r2) {
var v1;
var v2;
v1 = sortType(r1.data[field]);
v2 = sortType(r2.data[field]);
// To perform case insensitive sort
if (v1.toLowerCase) {
v1 = v1.toLowerCase();
v2 = v2.toLowerCase();
}
return directionModifier * (v1 > v2 ? 1 : (v1 < v2 ? -1 : 0));
};
}
});
答案 0 :(得分:1)
一般的解决方案是您应该使用Ext.util.Observable.capture()来监听商店中的所有事件,以便您可以看到实际发生的事情。
答案是,这取决于remoteSort
是否true
。如果它是true
,它与从服务器加载商店的功能相同。如果是false
,那么它似乎是同步的。
远程排序:
beforeload
datachanged
refresh
load
read
本地排序:
datachanged
read
对大约1000个元素进行排序需要20毫秒
演示:
http://jsfiddle.net/el_chief/q9cvs/3/
你也可以解雇自己的事件:
Ext.data.Store.override({
sort: function(sorters, direction){
this.fireEvent('sorting', this, {});
this.callParent(arguments);
this.fireEvent('sorted', this, {});
}
});