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() を使用してストアのすべてのイベントをリッスンし、実際に何が起こっているかを確認することです。

答えは、そうであるかどうかによるということ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 に答える