javascript - Backbone.js:在 View 之间导航 - 销毁和重新创建

标签 javascript backbone.js view router

我正在开发一个带有几个不同 View 的 Backbone.js Web 应用程序。假设我们在页面顶部有 AudioPlayer View ,该 View 应该是持久的,并在页面内容的其余部分发生变化时播放音频。页面内容的其余部分应该能够按需切换(路由器通过导航更新 url)。

我正在寻找正确的方法来隐藏/删除 FirstView,插入 SecondView,然后隐藏/删除 SecondView 并在用户单击“后退”按钮时再次插入/显示 FirstView。

有人告诉我,当 View 未显示时应该将其删除,以避免内存泄漏。如果这是真的,那么重新创建 View 的正确方法是什么,因为其关联的 view.el 在删除过程中已被销毁?还是有更合乎逻辑的方法来做到这一点?

最佳答案

我就是这样做的:

  1. 使用名为 open 的方法扩展 Backbone.View,该方法会将 View 附加到 DOM,并在当前打开的 View 上设置一个标志,以及类似的 close属性
  2. 将所有 View 属性设置为应用的通用 views 属性
  3. 在应用上创建一个名为 clearViews 的方法,该方法将关闭除传入的 View 名称之外的所有打开的 View

这是我一直在使用的要点(在 CoffeeScript 中)。欢迎复制。

https://gist.github.com/4597528

因此,在以这种方式扩展 Backbone 后,假设您要在关闭除 app.views.topNav 指向的顶部导航栏之外的所有打开的 View 后,在 Backbone 路由中创建并打开一个新 View 。你可以说:

app.clearViews('topNav');
app.views.myNewView = new MyView;
app.render().open('body'); // or some other container

对于像 Marionette 这样的大型项目,有一些很棒的 View 和布局管理器。作者:Derick Baily 和 LayoutManager作者:Tim Branyen,但对于我的小型项目来说,它们似乎太过分了。

关于javascript - Backbone.js:在 View 之间导航 - 销毁和重新创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14466257/

相关文章:

php - 使用以下数据库布局在 mysql 中创建 View 的最佳方法是什么?

javascript - 使用 javascript 自动单击超链接

循环内的Javascript函数不适用于其他div

javascript - 如何在 Javascript 中对某些特定值使用后备,而不是未定义?

backbone.js - collection.fetch({add :true}) work?

javascript - 如何创建外部按钮来操作单元格

java - 如何从 POJO 或 JavaBean 创建 Backbone 模型?

android - 动态添加的TextView的宽度和高度为零

javascript - NativeScript 绑定(bind)表达式中的多个属性

C# - 如何打印出 View 数据?