Ember.js 使用余烬在{{{#each}}中动态设置控制器
在Ember中,您可以使用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'
{{{#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,试图更完整地展示我在做什么。知道我做错了什么吗?