【问题标题】:Managing Backbone.js Page Transitions管理 Backbone.js 页面转换
【发布时间】:2012-07-05 23:00:27
【问题描述】:

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

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

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

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

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

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

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

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

谢谢!

【问题讨论】:

  • 当你渲染一个视图时,你会传递一个模型吗?如果是这样,只需重新调用视图的渲染函数,但将其传递给不同的模型。视图不会被破坏,其中的标记只是使用新传入模型的数据重新创建
  • 我目前正在处理的有一个顶级视图(我猜是页面视图),它传递了一个集合和一个模型(这些是实例化的,并且它们的 url 根据路由器设置在控制器中传递参数),这个顶级视图以它的骨架形式和几个子视图呈现 - 子视图根据它们显示和呈现的内容传递集合或模型(使用模型或集合数据) 还。我想我正在苦苦挣扎的是“顶级”管理。假设我们现在路由到另一个页面,我可以销毁这个页面并创建一个新的
  • 一个。但是说路线'改变',但实际上它是同一页面但具有不同的参数,是否可以仅更改资源(模型,集合)的 url / urlRoot 并重新获取,从而触发事件并重新渲染?我知道 Backbone.js 没有“正确的方法”,但我还没有看到我真正描述的内容。

标签: javascript backbone.js


【解决方案1】:

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

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

请记住,虽然约定是使用呈现元素的 render 方法,但您可以轻松地将附加刷新事件仅应用于 refresh 某些部分,然后您可以只交换模型(如 @ jackwanders 建议)并调用 refresh 方法。

【讨论】:

  • 好的,谢谢杰克。我认为这只是一个反复试验的案例,我会看看两者的表现如何。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 2022-12-09
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多