【发布时间】:2014-09-08 15:49:58
【问题描述】:
我有一个主干视图,其中包含各种研究项目的项目数据。
在这个视图中,我有一个按钮,当单击它时,它会执行一个名为“toggleChildView”的方法。此方法将子视图插入主页面。
在子视图中,我正在侦听用户单击页面上任何位置(包含研究子评论的元素除外)的事件。
问题是,如果我关闭子视图,子视图实际上仍然在某处徘徊,因为事件仍在触发,并且如果我打开和关闭子视图会触发多次。
例如,如果我打开和关闭子视图 5 次,在最终关闭后,事件仍会触发 5 次。
但如果关闭,它根本不应该触发,打开时只会触发一次。
我认为我的问题最好这样表述:
有没有办法摆脱“孤立的”子视图并确保一次只打开一个子视图?
谢谢!
Parent View:
toggleChildView: function (e) {
this.$('.displayresearchdata').toggle();
this.$('.editdata').toggle();
//initialize the research view into our main view
var researchView = new researchView({ parent: this });
self.$('.research').append(researchView.render().$el);
},
saveresearchdata: function (e) {
this.model.save('researchData', this.$(".researchData").html());
},
Child render method:
initialize: function (options) {
this.parent = options.parent;
},
render: function () {
var self = this;
this.$el.append(this.template());
$("body").on("click", function (event) {
if (!$(event.target).closest('.editdata').length) {
if (self.parent.$('.editdata').is(":visible")) {
self.parent.saveresearchdata();
}
}
});
return this;
},
【问题讨论】:
-
需要查看其余的视图定义才能提供帮助。
-
您应该始终对要删除的视图调用
remove,并且应该覆盖remove以提供任何特定于视图的清理(例如 @ 987654325@电话)。
标签: backbone.js backbone-views