如果View具有某个类(backbone.js),则单击时触发功能

Nyx*_*nyx 4 javascript jquery backbone.js underscore.js

我有一个div由backbone.js视图生成的.当用户点击它时div,会向该类active添加一个类divaddToSet执行该函数.

问题:当View div有类时,我想要触发另一个函数active.但是,我在下面显示的尝试总是会导致addToSet函数在单击时运行.

现在,我'click': 'addToSet'events功能中删除,只留下'click .active': 'removeFromSet'.点击div它不会导致任何事情发生!这是因为事件处理程序无法选择div视图本身,只是里面的元素吗?

知道如何解决这个问题吗?谢谢!

JS代码

SetView = Backbone.View.extend({
    tagName: 'div',
    className: 'modal_addit_set',

    template: _.template( $('#tpl_modal_addit_set').html() ),

    events: {
        'click': 'addToSet',
        'click .active': 'removeFromSet'
    },

    initialize: function(opts) {
        this.post_id = opts.post_id;
    },

    render: function() {
        $(this.el).html( this.template( this.model.toJSON() ) );
        if(this.model.get('already_added'))
            $(this.el).addClass('active');
        return this;
    },

    addToSet: function() {
        $.post('api/add_to_set', {
            post_id: this.post_id,
            set_id: this.model.get('id'),
            user_id: $('#user_id').val()
        });
    },

    removeFromSet: function() {
        $.post('api/remove_from_set', {
            post_id: this.post_id,
            set_id: this.model.get('id')
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

小智 6

您是否尝试为其中一个事件代理使用:not(.active)选择器?这可能有助于区分这两种情况.

像这样的东西:

events: {
   'click :not(.active)' : callback1
   'click .active' : callback2
}
Run Code Online (Sandbox Code Playgroud)