我在Backbone应用程序中有一个电子邮件视图。当前已在我的控制器的view
操作中实例化它。它有点像这样:
routes: {
'email/:id': email
},
//...
email: function (id) {
var email = new Email({
id: id
});
this.emailView = new EmailView({
model: email
});
email.fetch();
}
现在,问题是,如果我访问一封电子邮件,然后访问另一封电子邮件,则最终创建两个单独的
EmailView
。这意味着,例如,EmailView
中的删除链接绑定到两个单独的Email
模型,因此单击删除将删除这两个模型(不是一件好事)。我正在寻找两种解决方案。在其中之一中,我将缓存
EmailView
,并更新其模型。然后的问题是,我必须在events
中重新绑定EmailView
。另一个解决方案是像现在一样创建一个新的
EmailView
,但是在替换之前将旧的EmailView.el
事件取消绑定。我要这样做正确吗?有没有更好的方法来处理这种情况?提前加油。
最佳答案
为每个模型实例创建一个单独的视图实例。每次您访问新电子邮件时,都会丢弃旧视图,并使用新电子邮件实例创建新视图。
如果我猜想的话,大概是左侧的列表视图和右侧的编辑器。您从左侧列表中选择电子邮件,并希望电子邮件正文显示在右侧。
您确实想要大约5个视图类。
PageView
has_one EmailCollectionView on left
has_one EmailEditorView on right
EmailCollectionView
has_many EmailSummaryViews as vertical list
EmailEditorView
has_one EmailView centered
当您单击EmailCollectionView时,您将触发一个事件
由EmailEditorView拾取,并丢弃了旧的EmailView实例
并呈现新版本的EmailView
反正这样