我正在将一些javascript从ExtJS转换为jQuery,我不知道这是做什么的,所以我不确定它转换为...
hideTimeout = setTimeout(this.hideAll.createDelegate(this), delay);
延迟= 200
我不确定的是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);
}
};
答案 0 :(得分:2)
由于您位于setTimeout
,this
将代表window
对象。
我不知道ExtJS,但它似乎是在 window
上创建一个委托处理程序。
可能最好参考ExtJS文档。根据{{3}}:
创建一个委托(回调),将范围设置为obj。直接调用任何函数。示例:this.myFunction.cre ...
hideTimeout = setTimeout($.proxy( this.hideAll, this), delay);
它将确保在调用hideAll
时,将在其当前上下文中调用它。
您可以对setTimeout
中传递给show
的匿名函数执行相同的操作:
showTimeout = setTimeout($.proxy(function () {
this.el.show();
}, this), delay);
答案 1 :(得分:0)
你可以用jQuery完成同样的事情:
hideTimeout = setTimeout(jQuery.proxy(this, "hideAll"), delay);
编辑:由于方法hideAll
不包含对this
的引用,因此您可以更简单地完成此操作:
hideTimeout = setTimeout(this.hideAll, delay);