javascript - 为什么 Controller 在 Ember 中是单例的?

标签 javascript ember.js ember-data

我希望有人能为我们的团队解决这个问题。为什么 Controller 是单例的,不会在导航时重置?什么情况下最好不要每次都重置。我听说过“ Controller 作为单例在任何长期存在的应用程序中都非常有意义”,但与我交谈过的非 ember 开发人员同样对此感到困惑。这是一个 future 正在改进的设计缺陷还是我们只是以错误的方式看待事物?

希望得到一个非常明确的答案,我可以带回团队。谢谢大家!

最佳答案

并非所有 Controller 都是单例,大多数应用程序在迭代集合时将为每​​个模型创建实例 Controller 。 Ember 动态地为您创建一个 Controller 。

我使用 Controller 来包装我的所有模型实例,例如使用多个地址模型编辑联系人

基于路由的 Controller 是单例的,因为路由是单例的,并且通常在实例化后在应用程序的生命周期中持续存在。

在路由之间转换时,Ember 不需要拆除 Controller 和路由,因为租用路由时唯一需要更改的是 Controller 内容/模型属性。

如果您愿意,在路由转换时清除 Controller 的内容是很简单的。我最近刚刚回答了一个关于这样做的问题,并且还从商店中卸载了模型: https://stackoverflow.com/a/26695922/2238268

单例 Controller 对于管理应用程序中的其他状态也很有用,也许是全局 session /身份验证状态。

实际上,Ember 提供了单例 Controller 和实例 Controller ,并且根据业务逻辑的复杂性,它们的使用量都很大。我倾向于保持我的模型相当简单,并将任何与路由无关的内容放入 Controller 中。我在 Controller 中进行脏跟踪和撤消/恢复,以及在 Controller 中编排持久模型更改。除了路由级别 Controller 之外,我还有很多实例 Controller 支持 View 并实现可以跨越许多模型的更新逻辑。

关于javascript - 为什么 Controller 在 Ember 中是单例的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26812630/

相关文章:

ember.js - 手动规范化 JSON

javascript - Amcharts漏斗图,如何设置固定高度?

javascript - 如何将组件拖放到第一个单词

javascript - 如何在操作处理程序中获取原始事件对象?

javascript - 当从属属性更改时,Ember 计算属性不会更新

javascript - 如何在 Ember js 中获取 currentRouteName 的动态部分

javascript - Jquery/Javascript - 将 div 内的 <br> 转为换行符?

javascript - 在 div 中加载 html 页面

javascript - Ember 使用点击、命令/控制和 shift 键从列表中选择

Ember.JS:您的服务器返回了一个带有 key ID 的散列,但您没有它的映射