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

时间:2012-08-03 10:34:42

标签: 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')});

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

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

2 个答案:

答案 0 :(得分:5)

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

尝试

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

答案 1 :(得分:0)

隐式参数被发送到函数回调这个参数是jQuery Event Object,它包含很多信息,包括事件所针对的DOM元素:

var Composer = Backbone.View.extend({
    events: {
        "click #postnow":  "postnow"
    },
    postnow: function( event ){
        console.log( "postnow()" );
        console.log( "this", this );
        console.log( "event", event ); 
        console.log( "target", event.target ); 
        console.log( "data-value", $(event.target).attr( "data-value" ) ); 
    }
});

检查working jsFiddle