我一直在使用Ember,但有时仍在努力找出最佳做法。所以关于控制器和视图的Ember方法之一是
由路由器强制执行的Ember设计者的观点是,对于给定的BaseName(例如“Application”,“CustomerEntry”,“My Items”),应该有BaseNameView和BaseNameController。 - Ember guide
问题是,如果我想在页面上显示同一视图的多个实例,该怎么办?由于控制器是在应用程序启动期间创建的,因此它们是应用程序命名空间下的单例,它们将无法容纳模型数据的两个实例。
我看到的一个解决方案是手动创建控制器(和模型数据)并将它们传递给视图。但在这种情况下,我希望Ember不会自动为我创建控制器。换句话说,为什么Ember会在应用程序启动期间将控制器创建为单例。
答案 0 :(得分:2)
我认为有很多用例,其中View类型没有相应的Controller类型。特别是当视图类型更像UI小部件而不是完整的应用程序功能时。许多视图可以共享同一个控制器。看看这个applicationView模板:
<h1>Here are two files, compare them</h1>
{{view App.MyFileView contentBinding="leftFileContent"}}
{{view App.MyFileView contentBinding="rightFileContent"}}
这将创建我的视图类的两个实例,并将其内容属性绑定到applicationController上的两个不同属性。这两个视图的控制器属性都设置为singleton applicationController实例。
控制器是单例的一个可能原因可能是它们能够通过像App.router.myController
这样的全局命名空间来解决。