我们正在使用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命名空间中实例化。
我想过一些选择,但实际上并不喜欢它们。
有人对如何做到这一点有任何建议吗?我找不到任何关于此的文档,并且已经用完了googlejuize。
所有回复都将不胜感激!
答案 0 :(得分:2)
我想我会尝试使用{{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'))
}
})
})
这里我假设所有搜索视图将共享相同的控制器(及其底层应用程序状态)。