使用Ember在{{#each}}中动态设置控制器

时间:2013-03-13 17:55:46

标签: ember.js

在Ember中,您可以使用{{#each}}动态查找控制器,执行类似according to the guides的操作:

模板:

{{#each controller}}
  {{name}}  
{{/each}}

阵列控制器:

App.DocumentListController = Ember.ArrayController.extend
  lookupItemController: ((object) ->
    if @get('name') == 'something' then 'someController'
    else 'someOtherController'

我有一种情况,我想做同样的事情,但我需要使用ObjectController而不是ArrayController。

所以我的模板看起来更像是这样:

{{#each controller in controller.documents itemController=lookupItemController}}
  {{name}}
{{/each}}

对象控制器:

App.DocumentListController = Ember.ObjectController.extend
  lookupItemController: (object) ->
    if @get('name') == 'something' then 'someController'
    else 'someOtherController'

这第二个例子刚刚组成​​,不起作用。 有没有办法在{{#each}}中动态设置这样的控制器?有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

在这种情况下你可能会做的事情是:

App.ListController = Ember.ObjectController.extend
    needs: ['documents']

App.DocumentsController = Ember.ArrayController.extend
    needs: ['list']
    contentBinding: 'controllers.list.documents'
    lookupItemController: (object) ->
        if @get('name') == 'something' then 'someController'
        else 'someOtherController'

然后在你的模板中(假设'ListController'是视图的控制器):

{{#each document in controllers.documents}}
    {{document.name}}
{{/each}}