2012-03-20 137 views
6

我想了解使用關鍵字「this」的差別,或者更確切地說,它在jQuery中表示的是MVC框架(如Backbone)。關鍵字「this」在jQuery Vs中的含義MVC

下面是每個的2個代碼示例; 所以jQuery中,我們有

$("#result").click(function(){ 
$(this).html(someval); 
}) 

骨幹,我們有代碼;

var HandlebarsView = Backbone.View.extend({ 
el: '#result' 
initialize: function(){ 
this.template = Handlebars.compile($('#template').html());  
}, 
render: function(){ 
var html = this.template(this.model.toJSON()); 
this.$el.html(html); 
} 
}); 

現在我明白了「this」指的是jQuery中的DOM元素。

我想了解它代表骨幹代碼的意義。

請讓我知道。

+0

'this'指'HandlebarsView'的實例。 'this.model','this.template'和'this。$ el'是'HandlebarsView'視圖的成員,你可以參考doc獲得更多細節http://backbonejs.org/#View – dhaval 2012-03-20 11:51:26

+0

要知道什麼事情是,你做'console.log(this);'或'console.dir(this);'。這應該對你有所幫助。 – 2012-03-20 11:52:56

+1

_「現在我明白了」this「是指jQuery中的DOM元素。」_ - 除非它不... – nnnnnn 2012-03-20 11:54:25

回答

3

this是函數執行的上下文。

理解this的技巧是理解它是您執行決定它的函數的方式。

當您將函數傳遞給像jQuery這樣的方法時,您正在使用該函數作爲回調方法。 jQuery在執行時顯式設置回調的上下文。

當您使用點符號:myView.render()在對象上調用方法時,它是明確設置方法調用的上下文到點前面的對象的點符號。

上下文設置的規則在JavaScript中非常簡單,但會造成很多混淆。大多數語言都將自引用上下文變量設置爲定義方法的對象。不過,JavaScript使用方法調用模式來確定上下文。

當我們傳遞任意對象的方法作爲回調方法時,調用它的代碼設置方法的上下文 - 這包括Backbone的視圖和其他對象。你可以通過使用Underscore.js的'bindbindAll函數(http://documentcloud.github.com/underscore/#bind)以及其他一些技巧來明確地覆蓋它。


Backbone.View.extend({ 
    initialize: function(){ 
    _.bindAll(this); 
    } 
}); 

例如,這段代碼會將當前視圖對象上所有函數的上下文綁定到視圖。這保證了你的視圖方法的上下文永遠是視圖本身。

欲瞭解更多信息,請參閱:

1

在Backbone中,'this'視圖內部指的是當前視圖對象。在模型中,這個是指當前的模型對象。同樣,對於集合「這個」是指當前的集合對象。

但是對於'this'是jQuery中的選定dom元素和視圖對象之間的瞬態,這就是爲什麼我們使用_.bindAll函數,以便我們可以確保'this'在我們調用時仍然是當前視圖對象某些功能如「渲染」等。請參閱http://documentcloud.github.com/underscore/#bindAll