点击事件没有开火! (Backbone.js的)

时间:2012-07-10 21:28:56

标签: javascript jquery backbone.js underscore.js

我的View有一个点击处理程序,但点击事件处理程序所针对的视图el $('#modal')似乎在点击时不会触发。但是当我针对$('modal')的任何孩子时,点击事件会在点击时触发。

我猜测$('#modal')不被视为视图的一部分,因此events中定义的点击事件处理程序不起作用。如果是这样,还有另一种方式吗?

ModalView = Backbone.View.extend({
    el: $('#modal'),

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

    events: {
        'click #modal': 'closeModal'
    },

    initialize: function() {
        _.bindAll(this, 'render', 'renderSimilarPosts', 'closeModal');
        this.render();
    },

    render: function() {
        $(this.el).fadeIn('fast').append( this.template( this.model.toJSON( this.model ) ) );
    },

    closeModal: function() {
        // some code
    }
});

1 个答案:

答案 0 :(得分:9)

而不是:

'click #modal': 'closeModal'

尝试:

"click": 'closeModal'

Backbone事件使用jQuery的delegate函数,该函数将处理程序(在本例中为closeModal)应用于匹配给定选择器的所有子项(在本例中为click #modal)。由于click #modal我们在#modal中查找名为#modal的子项,因此找不到任何元素。

看看delegate(),看看我的意思。