2013-02-28 6 views
1

В моем примере ниже я пытаюсь вызвать myfunction из события jquery. это неправильно. Мое событие срабатывает, но я не уверен, как вызвать эту функцию из события. Идеи?В образе 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- how-do-i-call-another-function-from-jquery-each) также работали бы здесь: / – Cyclone

ответ

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); 
} 

Другой альтернативой было бы использовать метод привязки Underscore, который позволит вам делегировать обратный вызов именованной функции в вашей точки зрения и указать область, в которой он называется. Это будет выглядеть примерно так:

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

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

Я всегда чувствую себя немного грязный, когда мне приходится прибегать к that или self для решения проблем области видимости и будет пытаться избежать его, если это возможно. Я новичок в JavaScript, но, возможно, просто нужно принять его как необходимое зло;)