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

时间:2013-01-16 08:46:39

标签: ember.js

我们正在使用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命名空间中实例化。

我想过一些选择,但实际上并不喜欢它们。

  1. 我可以将控制器连接到'父控制器' 路由器,但是我必须在我的每条路线上这样做 使用共享组件,这将是很多。
  2. 我可以通过一些hacky方式获取控制器,并通过视图init函数中的init函数设置它。
  3. 有人对如何做到这一点有任何建议吗?我找不到任何关于此的文档,并且已经用完了googlejuize。

    所有回复都将不胜感激!

1 个答案:

答案 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'))
    }
  })
})

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