我的Backbone应用程序中有一个电子邮件视图.它目前在view我的控制器的动作中实例化.它有点像这样:
routes: {
'email/:id': email
},
//...
email: function (id) {
var email = new Email({
id: id
});
this.emailView = new EmailView({
model: email
});
email.fetch();
}
Run Code Online (Sandbox Code Playgroud)
现在,问题是,如果我访问一封电子邮件,然后是另一封电子邮件,我最终会创建两个单独EmailView的邮件.这意味着,例如,其中的删除链接EmailView绑定到两个单独的Email模型,因此单击删除将删除两者(不是一件好事).
我正在寻找两种解决方案.在一个,我缓存EmailView,并更新其模型.那么问题是我必须重新绑定eventsin 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
Run Code Online (Sandbox Code Playgroud)
当您单击 EmailCollectionView 时,您会触发一个由 EmailEditorView 拾取的事件,该事件会丢弃 EmailView 的旧实例并呈现 EmailView 的新版本
无论如何,类似的事情