在ExtJS中,我如何知道商店何时开始排序并完成排序?

时间:2012-07-20 14:46:35

标签: extjs extjs3

我有一个网格商店。用户可以单击标题进行排序。我需要知道商店什么时候开始排序并完成排序。我该附加什么?我看不到商店的开始排序和结束排序事件。

以下是我正在使用的那种:

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));
        };
    }
});

1 个答案:

答案 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, {});

  }
});
相关问题