2013-10-08 28 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我覺得這很理智主張後者。 (你可能想滾動一下找到肉)。