将`on`模式转换为Backbone的`event`散列

Ran*_*lue 5 backbone.js

在我的Backbone视图中,在initialize函数中我做的事情如下:

initialize: function () {
    $(this.el).on('click', '.button', function () {
        $(this).fadeTo(0.5);
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎违背了Backbone的使用惯例events.用events哈希重写:

events: { 'click .button': 'fadeButton' },
fadeButton: function () {
    $(this).fadeTo(0.5);
}
Run Code Online (Sandbox Code Playgroud)

问题在fadeButton于其范围内的值与this使用时的值不同.on().使用events哈希这样做的正确方法是什么?

sat*_*run 7

就像paul所说,Backbone会自动为视图本身设置事件回调的上下文.所以this在回调中将是视图实例.

因此,您可以使用视图的范围选择器函数来获得您想要的效果...

events: { 
  'click .button': 'fadeButton' 
},

fadeButton: function () {
  this.$('.button').fadeTo(0.5);
}
Run Code Online (Sandbox Code Playgroud)

......但如果你已经有了类具有多种元素"button"在你看来,这会淡化所有这些,在这种情况下,你可以随时使用事件对象的jQuery让你获得活动对象:

fadeButton: function (event) {
  $(event.target).fadeTo(0.5);
}
Run Code Online (Sandbox Code Playgroud)