我的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
}
});
答案 0 :(得分:9)
而不是:
'click #modal': 'closeModal'
尝试:
"click": 'closeModal'
Backbone事件使用jQuery的delegate
函数,该函数将处理程序(在本例中为closeModal
)应用于匹配给定选择器的所有子项(在本例中为click #modal
)。由于click #modal
我们在#modal中查找名为#modal的子项,因此找不到任何元素。
看看delegate()
,看看我的意思。