2011-06-28 18 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); 

を書きましたウィジェット。