1

我知道这是一个非常普遍讨论的话题,但我找不到任何能准确回答我的问题的东西:)

我目前正在开发一个 Backbone.js 项目。路由器方面,我不会在路由器中实例化视图、模型或集合,而只是将路由器用作处理状态的一种方式——路由器调用我的自定义控制器对象上的方法。

然后我的控制器为索引、显示等实例化不同的视图、模型和集合。这一切都很好。

我只是在如何处理页面转换方面有点挣扎。我已经阅读了所有关于管理僵尸等的精彩文章,并且知道无论发生什么我都必须有一些旧视图的清理系统(我目前正在使用 Derick Bailey 博客中提到的 .close() 方法)。

如果我要从#show 到#index,或任何其他路线更改,我知道只实例化新的、新鲜的视图、模型等是有意义的——这几乎是我在每个教程中看到的。当然,确保清理旧的。

但是,如果我已经在#show 上说,并且我路由到另一个#show 页面,那么我想要的所有视图等都已经实例化和呈现。我只想更改模型和集合的数据。

所以我想我的问题是为什么我看不到人们重用视图的频率很高。在我的脑海中,我在想如果你已经在你想要的页面上,那么只更新该视图链接到的模型/集合的 url 或 urlRoot 并重新获取会更有意义。然后这将触发一个重置事件,并且所有需要的视图都可以订阅并重新呈现自己。

但是,正如我所说,我没有看到人们这样做。仅仅是因为这是一个非常糟糕的主意吗?如果有人在做这样的事情,你如何处理跟踪“可刷新”模型和集合?

谢谢!

4

1 回答 1

2

我认为这在很大程度上取决于您如何使用您的视图以及它们的复杂性/大小。

如果您的视图非常简单,那么重新渲染整个视图并用新标记替换现有 HTML 通常会更容易(它也可能比遍历 DOM 来更改必要部分更快。但是,如果您有更复杂的视图并且只有少量信息发生变化,最好听听适当的属性更改事件(例如_bind('change:name', this.nameChanged,this),然后只更新 DOM 的那部分。

请记住,虽然约定是使用render渲染元素的方法,但您可以轻松地将额外的刷新事件应用到refresh某些部分,然后您可以交换模型(如 @jackwanders 建议的那样)并调用该refresh方法。

于 2012-07-05T18:24:19.017 回答