2013-10-08 25 views
0

如果我想调用Backbone视图内的函数,我必须像这样调用它。BackboneJS - 使用关键字内部视图

this.functionName()

如果我要打电话内forEach或者jquery's each功能相同的功能,this是指不同的上下文这里。所以我需要保留视图对其他变量的引用,我必须使用它像下面的东西。

refresh: function() { 
    var view = this; 

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

最后,如果我看看我的观点,我宣布几乎所有的功能。有没有人找到更好的替代方案?

+0

不是这是一个常用的做法,实质上是正确的,因为js中的作用域方法。一般var that = this;被使用:)使用视图作为变量名可能会混淆! – beNerd

+0

所以大家都这样做。持有参考查看每个功能开始!很高兴知道。谢谢。 – user10

回答

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(),我想不出什么时候使用它的好例子,但很高兴知道它存在,你可能需要它。

+0

超。谢谢.. – user10

5

由于您使用Backbone,因此您已经拥有下划线。使用下划线可以为每个呼叫指定上下文。

refresh: function() { 

    _.each($("#list"), function() { 
     this.functionName() 
    }, this)) 

} 
0

的usuals被定义要么var that = this;var self = this;var _this = this;

Airbnb JavaScript Style Guide我觉得这很理智主张后者。 (你可能想滚动一下找到肉)。