2013-02-28 49 views
1

在我下面的例子中,我試圖從jquery事件中調用myfunction。這個不對。我的事件發生了,但我不確定如何從事件中調用此函數。想法?在backbone.js視圖中,如何從jquery事件調用同一視圖中的函數?

registerSliderControlEvents: function(){ 
    $("#slider-fill").on('slidestop', function (event) { 
      //...some code 

      this.myfunction(size); 
     } 
}, 

myfunction: function(size){ 
     //....some code 
} 
+0

[this](http://stackoverflow.com/questions/15138163/in-backbone-js-view-我怎麼做 - 我調用另一個函數從jQuery的每一個)也可以在這裏工作:/ – Cyclone 2013-02-28 17:11:30

回答

4

因爲您處於關閉狀態,所以this的範圍已更改。預先將this存儲在變量中是很常見的做法。類似的東西來:

registerSliderControlEvents: function(){ 
    var self = this; 
    $("#slider-fill").on('slidestop', function (event) { 
      //...some code 

      self.myfunction(size); 
     } 
} 
1

您可以使用Backbone.View事件哈希以避免與範圍(見文檔here)的任何問題。像下面這樣:

events: { 
    'slidestop #slider-fill': 'handleSlideStop' 
}, 

handleSlideStop: function() { 
     // Not sure where size param is coming from, but assuming 
     // you can set it as a property of the view somewhere. 
     console.log('Size', this.size); 
} 

另一種選擇是使用下劃線的綁定方法,這將使你的回調委託到您的視圖命名功能,並指定在調用它的範圍。這將是這個樣子:

registerSliderControlEvents: function(){ 
    $("#slider-fill").on('slidestop', _.bind(this.myFunction, this)); 
}, 

myfunction: function(size){ 
     //....some code 
} 

我總覺得,當我不得不求助於thatself解決範圍有關的問題,並會嘗試儘可能地避免它輕度污染。然而,我很新的JavaScript,也許只是需要接受它作爲必要的邪惡;)

相關問題