1

我正在将 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 元素,而不是点击的子元素。

有没有办法在不再次明确指定选择器的情况下做到这一点?

4

2 回答 2

5

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

尝试

var Composer = Backbone.View.extend({
    events: {
        "click #postnow":  "postnow"
    },
    postnow: function(e){
        var btn = $(e.currentTarget);
    }
});
于 2012-08-03T10:42:50.740 回答
0

一个隐式参数被发送到函数回调,这个参数是一个jQuery 事件对象,它包含很多信息,包括事件所针对的 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" ) ); 
    }
});

检查工作的 jsFiddle

于 2012-08-03T10:44:21.960 回答