ember.js – 在需要控制器的模板中使用共享View的推荐方法是什么

我们正在使用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'))
    }
  })
})

在这里,我假设所有搜索视图将共享相同的控制器(及其底层应用程序状态).

点赞