backbone.js – 更改视图的模型时,更换模型或创建新视图是否更好?

我的Backbone应用程序中有一个电子邮件视图它目前在我的控制器的查看操作中实例化。它有点像这样:

routes: {
  'email/:id': email
},

//...

email: function (id) {
  var email = new Email({
    id: id
  });
  this.emailView = new EmailView({
    model: email
  });
  email.fetch();
}

现在,问题是,如果我访问一个电子邮件,然后另一个,我最终创建两个单独的EmailViews。这意味着,例如,EmailView中的删除链接绑定到两个单独的电子邮件模型,因此点击删除将同时删除(不是一件好事)。

我在看两个解决方案。一个,我会缓存EmailView,并更新其模型。那么问题是我必须重新绑定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

这样的东西

转载注明原文:backbone.js – 更改视图的模型时,更换模型或创建新视图是否更好? - 代码日志