在Backbone View的委托事件中,如何访问事件的源元素?

jul*_*n_c 1 backbone.js

我正在将jQuery代码重写为Backbone,但我陷入了一个看似微不足道的问题:

在一个元素的回调中,该元素是主View元素的子元素,如何访问被单击的特定子元素(例如)?

var Composer = Backbone.View.extend({
    events: {
        "click #postnow":  "postnow"
    },
    postnow: function(){
        // @fixme:
        var btn = $("#postnow");
        // Do something
    }
});

new Composer({el: $('.composer')});
Run Code Online (Sandbox Code Playgroud)

在jQuery中,我会使用$(this),但在Backbone中它引用的是View元素,而不是被点击的子元素.

如果没有明确指定选择器,有没有办法做到这一点?

nik*_*shr 5

在视图回调中,您可以访问jQuery事件及其属性,更具体地说,可以访问event.currentTarget

尝试

var Composer = Backbone.View.extend({
    events: {
        "click #postnow":  "postnow"
    },
    postnow: function(e){
        var btn = $(e.currentTarget);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • @julien_c Backbone将事件处理委托给jQuery/Zepto并依赖它们进行回调,Backbone不会包装你的函数,也不会拦截事件来呈现快捷方式或语法糖.此外,Backbone的作者杰里米·阿什克纳斯(Jeremy Ashkenas)对于Backbone应该为您处理的内容采用非常"极简主义"的方法,如果没有真正的好处可以看到.因此,元素周围没有包装.并且$(e.target)不是那么久:) (2认同)