2012-07-20 62 views
1

我有一個網格商店。用戶可以點擊標題進行排序。我需要知道商店何時開始分揀並完成分揀。我附加什麼?我看不到商店的排序和結束排序事件。在ExtJS中,我如何知道商店何時開始分揀並完成分揀?

這裏是我使用的排序:

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

GridPanel中確實有sortchange事件,雖然我不知道,如果它之前或排序之後觸發。 – Derek 2012-07-20 18:44:36

回答

1

一般的解決方法是,你應該使用Ext.util.Observable.capture()聽取所有事件的商店,所以你可以看到什麼真的發生了。

答案取決於remoteSort是否爲true。如果它是true,它與從服務器加載存儲的功能相同。如果它是false,那麼它似乎是同步的。

遠程排序:

beforeload 
datachanged 
refresh 
load 
read 

本地排序:

datachanged 
read 

排序約1000元了20ms的

示範:

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

    } 
}); 
+0

這是一個本地排序。看起來好像沒有開始排序和結束排序事件。 – 2012-07-23 11:20:31

+0

你怎麼整理它?從網格?或在代碼? – 2012-07-23 18:59:48

+0

在代碼中。我從堆棧溢出代碼執行不區分大小寫的排序。查看我更新的代碼。 – 2012-07-23 19:46:59