Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用backbone.js在视图中收听body单击_Backbone.js_Backbone Events_Backbone Views - Fatal编程技术网

使用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你的权利,我本想提及,但忘了,我更新了我的答案。