2011-06-28 102 views
1

我不確定如何描述這個問題,但我正在使用非常有用的SlickGrid JQuery插件創建JQueryUI部件。 Slickgrid允許設置一個用作「過濾器」的函數來啓用客戶端上的行搜索。像這樣...JQueryUI部件功能範圍問題

_filter: function (item) { 
      if (this.options.searchString == null) 
      { return true; } 
      if (this.options.searchString.length == 0) 
      { return true; } 
      for (var prop in item) { 
       if (item[prop] != null) { 
        if (item[prop].toString().toLowerCase().indexOf(searchString.toLowerCase()) > -1) 
        { return true; } 
       } 
      } 
      return false; 
     } 


self.options.dataView.setFilter(self._filter); 

我的問題是,一旦_filter被調用,this被設置爲窗口元素,並不再持有到窗口小部件的引用,所以我所有的選項不可用。我怎麼能告訴_filter用戶在網格中搜索什麼術語?

難度:多個小部件實例將在頁面上,每個小部件實例都有自己獨立的過濾器。另外,我不想修改SlickGrid的工作方式。

回答

0

不知道這是最好的答案,但這裏是我想出了:

通過的建議上http://www.robertsosinski.com/2009/04/28/binding-scope-in-javascript/,在我創造的功能,我寫

this._filter = function (item) { 

       if (this.options.searchString == null) 
       { return true; } 
       if (this.options.searchString.length == 0) 
       { return true; } 
       for (var prop in item) { 
        if (item[prop] != null) { 
         if (item[prop].toString().toLowerCase().indexOf(this.options.searchString.toLowerCase()) > -1) 
         { return true; } 
        } 
       } 
       return false; 
      } .bind(this); 

哪些約束範圍小部件。