Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么控制器在余烬中是单件的?_Javascript_Ember.js_Ember Data - Fatal编程技术网

Javascript 为什么控制器在余烬中是单件的?

Javascript 为什么控制器在余烬中是单件的?,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我希望有人能为我们的团队澄清这一点。为什么在导航时没有重置的控制器是单例的?在什么情况下,最好不要每次都重置。我听说过“控制器作为单例在任何长寿命的应用程序中都是非常有意义的”,但与我交谈过的非余烬开发者对此同样感到困惑。这是一个设计缺陷,在未来会得到改进,还是我们只是以错误的方式看待问题 希望能有一个明确的答案,我可以带回球队。谢谢大家 并非所有控制器都是单例的,大多数应用程序在迭代集合时都会为每个模型创建实例控制器。余烬为您动态创建一个控制器 我使用控制器包装我的所有模型实例,例如编辑具有多

我希望有人能为我们的团队澄清这一点。为什么在导航时没有重置的控制器是单例的?在什么情况下,最好不要每次都重置。我听说过“控制器作为单例在任何长寿命的应用程序中都是非常有意义的”,但与我交谈过的非余烬开发者对此同样感到困惑。这是一个设计缺陷,在未来会得到改进,还是我们只是以错误的方式看待问题


希望能有一个明确的答案,我可以带回球队。谢谢大家

并非所有控制器都是单例的,大多数应用程序在迭代集合时都会为每个模型创建实例控制器。余烬为您动态创建一个控制器

我使用控制器包装我的所有模型实例,例如编辑具有多个地址模型的联系人

基于路由的控制器是单例的,因为路由是单例的,一旦实例化,通常会在应用程序的生命周期内保持

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

如果您愿意,清除路由转换上控制器的内容是很简单的。我最近刚刚回答了一个问题,关于如何做到这一点,以及如何从商店中卸载模型:

单例控制器还可以用于管理应用程序中的其他状态,可能是gloabal会话/身份验证状态


因此,Ember提供了单例控制器和实例控制器,它们的使用很大程度上取决于业务逻辑的复杂性。我倾向于保持我的模型相当简单,并将任何与路线无关的东西放在控制器中。我在控制器中执行脏跟踪和撤消/恢复,并在控制器中协调持久化模型更改。除了路由级控制器之外,我还有很多实例控制器支持视图,并实现可以跨越许多模型的更新逻辑

表演。由于计算属性是余烬的积分,因此几乎不需要重新创建控制器。通用用例单例工作得非常好。你有什么问题吗?