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

Ember.js 使用余烬在{{{#each}}中动态设置控制器,ember.js,Ember.js,在Ember中,您可以使用{{{#each}}执行以下操作来动态查找控制器: 模板: {{#each controller}} {{name}} {{/each}} 阵列控制器: App.DocumentListController = Ember.ArrayController.extend lookupItemController: ((object) -> if @get('name') == 'something' then 'someController'

在Ember中,您可以使用
{{{#each}}
执行以下操作来动态查找控制器:

模板:

{{#each controller}}
  {{name}}  
{{/each}}
阵列控制器:

App.DocumentListController = Ember.ArrayController.extend
  lookupItemController: ((object) ->
    if @get('name') == 'something' then 'someController'
    else 'someOtherController'
App.DocumentListController = Ember.ObjectController.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.ArrayController.extend
  lookupItemController: ((object) ->
    if @get('name') == 'something' then 'someController'
    else 'someOtherController'
App.DocumentListController = Ember.ObjectController.extend
  lookupItemController: (object) ->
    if @get('name') == 'something' then 'someController'
    else 'someOtherController'

第二个例子是虚构的,不起作用有没有一种方法可以在
{{{each}}
中动态设置这样的控制器?
有没有更好的方法来实现这一点?

在这种情况下,您可能会执行以下操作:

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”是视图的控制器):


您能解释一下为什么文档列表控制器需要是ObjectController而不是ArrayController吗?没有必要对控制器吝啬,因此适当地划分职责应该很简单。这看起来是正确的答案,但出于某种原因,contentBinding似乎对我不起作用——子控制器(“documentsController”)上的内容总是空着:[]。我做了一个JSFiddle,试图更完整地展示我在做什么。知道我做错了什么吗?