2010-11-19 11 views
1

私はExtJSのからのjQueryにいくつかのJavaScriptを変換していると私はこれは私はそれが変換はよく分からないので、何をするか分からない...これに相当するjQueryとは何ですか?それは何ですか?

hideTimeout = setTimeout(this.hideAll.createDelegate(this), delay); 

遅延= 200

何をI 「についてはよく分からないcreateDelegate(this)です...

更新

すべてのJSは...

です
Menu.prototype = { 
     init: function() { 
      var that = this; 

      this.ui.link.bind("mouseover", function (e) { 
       that.show(); 
      }); 
      this.ui.link.bind("mouseout", function (e) { 
       that.hide(); 
      }); 

      var subOptions = $("li", this.ui.parent); 

      $.each(subOptions, function (el) { 
       el = $(el); 

       el.bind("mouseover", that.cancelTimeout, this); 
       el.bind("mouseout", that.hide, this); 
      }); 
     }, 
     hideAll: function() { 
      $("#hd .nav ul ul").hide(); 
     }, 
     show: function() { 

      this.hideAll(); 

      this.cancelTimeout(); 

      showTimeout = setTimeout((function() { 
       this.el.show(); 
      }).createDelegate(this), delay); 
     }, 
     hide: function() { 
      this.cancelTimeout(); 

      hideTimeout = setTimeout(this.hideAll.createDelegate(this), delay); 
     }, 
     cancelTimeout: function() { 
      clearTimeout(hideTimeout); 
      clearTimeout(showTimeout); 
     } 
    }; 

答えて

2

あなたがsetTimeoutにいるので、thiswindowオブジェクトを表します。

私はExtJSについてはわかりませんが、windowにデリゲートハンドラを作成しているようです。

おそらく、ExtJSドキュメントを参照することをお勧めします。 docs for createDelegate

スコープをobjに設定するデリゲート(コールバック)を作成します。任意の機能を直接呼び出します。例:this.myFunction.cre ...


編集:私はそれがこのように呼ばれることになると信じて:

hideTimeout = setTimeout($.proxy(this.hideAll, this), delay); 

それはhideAllが呼び出されたときに、それが呼び出されることを保証します現在の状況では以来:

hideTimeout = setTimeout(jQuery.proxy(this, "hideAll"), delay); 

EDIT:あなたはとてもようにjQueryを使って同じことを達成することができます

showTimeout = setTimeout($.proxy(function() { 
       this.el.show(); 
       }, this), delay); 
+0

申し訳ありませんが、本当に何が起こっているのかを把握するのに十分な詳細を教えてくれませんでした...そして、委任ハンドラをどういう意味ですか?どのようにjQueryでそれを行うのですか? – Webnet

+0

jQueryを使ってどうすればいいですか? – Webnet

+0

@Webnet - 呼び出された関数のコンテキストを設定しているようです。したがって、ここで影響を与える関数は 'hideAll'です。 jQueryには 'jQuery.proxy()'というメソッドがありますが、それは必要ではないかもしれません。 'hideAll'の使い方によって異なります。 – user113716

0

あなたはshowsetTimeoutに渡された匿名関数のために同じことを行うことができますhideAllにはthisへの参照が含まれていないので、これをさらに簡単に行うことができます:

hideTimeout = setTimeout(this.hideAll, delay); 
関連する問題