如果我想在Backbone视图中调用一个函数,我必须像这样调用它。
this.functionName()
如果我想在forEach
或jquery's each
函数中调用相同的函数,this
在此处引用不同的上下文。所以我需要持有视图对其他变量的引用,我必须使用类似下面的内容。
refresh: function () {
var view = this;
$("#list").each (function () {
view.functionName();
})
}
最后,如果我看一下我的观点,我就像几乎所有的功能一样宣布。有人找到了更好的替代品吗?
答案 0 :(得分:5)
由于您使用的是Backbone,因此您已经有了下划线。使用下划线,您可以为每个调用指定上下文。
refresh: function() {
_.each($("#list"), function() {
this.functionName()
}, this))
}
答案 1 :(得分:1)
这在Javascript中确实很常见,按照惯例他们称之为变量that
:
var that = this
jQuery还有一个proxy()
函数,它将调用一个函数并将上下文变量(this
)设置为您指定的内容:http://api.jquery.com/jQuery.proxy/
所以你可以这样做:
refresh: function() {
$("#list").each($.proxy(function() {
view.functionName()
}, this))
}
但大多数时候它更难以理解。说实话,我从不使用proxy()
而我想不出何时使用它的好例子,但很高兴知道它存在,你可能需要它。
答案 2 :(得分:0)
通常会定义var that = this;
或var self = this;
或var _this = this;
我发现非常理智的Airbnb JavaScript Style Guide提倡后者。 (你可能想要滚动一点来找到肉)。