我们正在使用Ember(路由器V2)的更高版本之一,而不是更新的路由器V2.2(最后提交:668783a(2013-01-06 21:10:55 -0800))
在我们的解决方案中,我们有几个View组件(网格,自动完成,搜索视图等).其中一些组件访问商店,模型等,因此他们有一个处理该工作的控制器.在我们的解决方案中,这些视图用于多个模板中.
在旧版本(pre2)中,我们使用了这样的视图组件:
App.ConsoleView = Ember.View.extend({
templateName: 'console',
searchView: App.SearchView.extend(),
.....
})
在控制台模板中,我们使用了这样的通用视图
{{view view.searchView controllerBinding='App.searchController'}}
我一直认为这种方法不是最好的方法,而且随着Ember的新版本,我们用手指砸了我们:)
现在回答一个问题:’在需要控制器的模板中使用共享视图的推荐方法是什么.
在较新版本的Ember模板表达式中
{{view view.searchView controllerBinding='App.searchController'}}
不起作用,因为App.searchController不再在App命名空间中实例化.
我想过一些选择,但真的不喜欢它们.
>我可以通过控制器连接到’父控制器’
路由器,但是我必须在我的每条路线上这样做
使用共享组件,这将是很多.
>我可以通过一些hacky方式获取控制器,并通过视图init函数中的init函数设置它.
有人对如何做到这一点有任何建议吗?我找不到任何关于此的文档,并且已经用完了googlejuize.
所有回复将不胜感激!
最佳答案 我想我会尝试使用{{render“search”}},它会查找searchController,然后实例化一个SearchView并连接它们.
否则,我知道目前正在进行讨论,以便能够在视图助手中传递控制器类.但尚未实施.
更新:目前,我可能会使用你提出的第二个解决方案,使用https://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/ext/controller.js#L33
App.ParentView = Ember.View.extend({
searchView = Ember.View.extend({
init: function(){
this._super();
this.set('controller', this.get('parentView.controller').controllerFor('search'))
}
})
})
在这里,我假设所有搜索视图将共享相同的控制器(及其底层应用程序状态).