我知道这是一个非常常见的话题,但我找不到任何可以完全回答我问题的内容:)
我正在研究Backbone.js项目。路由器方面我没有在路由器中实例化视图,模型或集合,而只是使用路由器作为处理状态的一种方式 - 路由器调用我的自定义控制器对象上的方法。
我的控制器然后为索引,显示等实例化不同的视图,模型和集合。这一切都很好,花花公子。
我对如何处理页面转换感到有些困难。我已经阅读了关于管理僵尸等的所有精彩帖子,并且知道无论发生什么,我都必须为旧视图设置一些清理系统(我目前正在使用Derick Bailey博客的.close()方法)。
如果我从#show转到#index,或任何其他路线更改,我明白只是实例化新的,新鲜的视图,模型等是有道理的 - 这就是我的意思几乎每个教程都看到了。当然,确保清理旧的。
但是,如果我已经在#show说,并且我路由到另一个#show页面,我想要的所有视图等都已经实例化并呈现。我想要改变的只是模型和集合的数据。
所以我猜我的问题是为什么我没有看到人们重复使用观点。在我脑海中,我在想如果你已经在你想要的页面上,那么只更新该视图链接到的模型/集合的url或urlRoot并重新获取会更有意义。然后,这将触发重置事件,并且所有需要的视图可以订阅并重新呈现自己。
但是,正如我所说,我不认为有人这样做。这只是因为这是一个非常糟糕的主意吗?如果某人正在做这样的事情,你如何处理跟踪'可刷新的'模型和集合?
谢谢!
答案 0 :(得分:2)
我认为这很大程度上取决于您如何使用您的观点以及它们的复杂程度。
如果您的视图非常简单,那么通常更容易重新渲染整个视图并用新标记替换现有HTML(它也可能比遍历DOM更快地更改必要的部分。但是如果您有一个更复杂的视图,只有少量信息在变化,最有可能听到适当的属性更改事件(例如。_bind('change:name', this.nameChanged,this)
),然后只更新DOM的那部分。
请记住,虽然约定是使用呈现元素的render
方法,但您可以轻松地将其他刷新事件仅应用于refresh
某些部分,然后您可以只需交换模型(如@jackwanders建议)并调用refresh
方法。