2010-11-19 107 views
1

我從ExtJS的轉換一些JavaScript jQuery的,我不知道這是什麼一樣,所以我不知道該怎麼把它轉換成...什麼是jQuery等同於此,它有什麼作用?

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

延遲= 200

我「M不知道是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,this將代表window對象。

我不知道ExtJS,但它似乎是在window上創建委託處理程序。

可能最好引用ExtJS文檔。根據docs for createDelegate

創建委託(回調),將範圍設置爲obj。直接調用任何函數。例如:this.myFunction.cre ...


編輯:我相信它會被稱爲是這樣的:

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

這將確保當hideAll被調用時,它會被稱爲在目前的情況下。

你可以傳遞給setTimeout匿名函數同樣的事情在show

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

對不起,我沒有給你足夠的細節,以真正瞭解發生了什麼事.... ....你是什麼意思委託處理程序?我如何在jQuery中做到這一點? – Webnet 2010-11-19 01:32:21

+0

那麼我怎麼用jQuery來做到這一點呢? – Webnet 2010-11-19 01:37:26

+0

@Webnet - 它似乎爲它所調用的函數設置了一個上下文。所以它會在這裏影響的函數是'hideAll'。 jQuery有一個名爲'jQuery.proxy()'的方法,它類似,但可能不需要。取決於如何使用'hideAll'。 – user113716 2010-11-19 01:38:03

0

可以完成同樣的事情用jQuery像這樣:

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

編輯:由於方法hideAll不包含對this的引用,則可以更簡單地完成此操作:

hideTimeout = setTimeout(this.hideAll, delay); 
相關問題