1

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

这是我正在使用的那种:

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

1 回答 1

1

一般的解决方案是你应该使用 Ext.util.Observable.capture() 来监听 store 上的所有事件,这样你就可以看到真正发生了什么。

答案是,这取决于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, {});

  }
});
于 2012-07-20T18:53:04.780 回答