使用backbone.js在视图中收听body单击
我正在创建一个这样的模态对话框使用backbone.js在视图中收听body单击,backbone.js,backbone-events,backbone-views,Backbone.js,Backbone Events,Backbone Views,我正在创建一个这样的模态对话框 window.NewPageModalView = Backbone.View.extend({ template: _.template($('#view-template-new-page-dialog').html()), el: $('div#main'), events: { 'click input[type=radio]': 'newPage' }, newPage: function
window.NewPageModalView = Backbone.View.extend({
template: _.template($('#view-template-new-page-dialog').html()),
el: $('div#main'),
events: {
'click input[type=radio]': 'newPage'
},
newPage: function (event) {
$(event.currentTarget).closest('form').submit();
},
initialize: function () { },
render: function () {
$(this.el).append(this.template());
return this;
}
});
addPage: function (event) {
event.preventDefault();
var modal = new NewPageModalView();
modal.render();
}
然后我在另一个视图中创建它,就像这样
window.NewPageModalView = Backbone.View.extend({
template: _.template($('#view-template-new-page-dialog').html()),
el: $('div#main'),
events: {
'click input[type=radio]': 'newPage'
},
newPage: function (event) {
$(event.currentTarget).closest('form').submit();
},
initialize: function () { },
render: function () {
$(this.el).append(this.template());
return this;
}
});
addPage: function (event) {
event.preventDefault();
var modal = new NewPageModalView();
modal.render();
}
这非常有效,但是如果我想在单击主体或按escape时关闭对话框,最好的方法是什么?一般来说,当您使用事件哈希绑定主干中的事件时,它们被委托给视图的el,但是您仍然可以将事件绑定到initialize方法中的其他内容(在您的示例中是主体) 编辑:
正如@muistooshort提到的,您还需要确保解除绑定事件。好的,我想我可以使用主干事件来连接它,但我猜它只绑定到视图el,正如您所说。您还需要从
body
的某个位置解除绑定。您还可以将视图el设置为body,但这可能不是你想要的方式。@muistooshort你的权利,我本想提及,但忘了,我更新了我的答案。