BackboneJS - 在视图中使用关键字

时间:2013-10-08 06:52:18

标签: javascript backbone.js

如果我想在Backbone视图中调用一个函数,我必须像这样调用它。

this.functionName()

如果我想在forEachjquery's each函数中调用相同的函数,this在此处引用不同的上下文。所以我需要持有视图对其他变量的引用,我必须使用类似下面的内容。

refresh: function () {
   var view = this;

   $("#list").each (function () {
       view.functionName();
   })
}

最后,如果我看一下我的观点,我就像几乎所有的功能一样宣布。有人找到了更好的替代品吗?

3 个答案:

答案 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提倡后者。 (你可能想要滚动一点来找到肉)。