1

在下面的示例中,我试图从 jquery 事件中调用 myfunction。这个不对。我的事件触发了,但我不确定如何从事件中调用此函数。想法?

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

            this.myfunction(size);
        }
},

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

2 回答 2

4

因为你在一个闭包中,所以范围this已经改变了。this预先存储在变量中是常见的做法。类似于:

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

            self.myfunction(size);
        }
}
于 2013-02-28T17:01:32.720 回答
1

您可以使用Backbone.View事件哈希来避免任何范围问题(请参阅此处的文档)。类似于以下内容:

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 还是很陌生,也许只需要接受它是一种必要的邪恶;)

于 2013-02-28T17:25:14.837 回答