为什么我不能在插座中迭代我的ArrayController?

时间:2014-10-16 00:36:45

标签: arrays ember.js controller

我的应用中有一个页面,旁边有控件,可让您选择是否要管理帐户或组。然后我在我的车把上有一个插座,我将为用户想要处理的内容呈现相应的模板:{{outlet workbench}}

这适用于帐户:

  @render('account/link/workbench', {
    into   : 'account/link'
    outlet : 'workbench'
    controller : 'accountLink'
  })

但是,对于团体来说,它有点破碎:

  @render('account/link/groups', {
    into : 'account/link'
    outlet : 'workbench'
    controller : 'accountGroup'
  })

AccountLinkControllerAccountGroupController都来自同一个基类 - TableController - 这是一个ArrayController。问题是,我无法迭代AccountGroupController中的子控制器。 (即像this.map这样的函数总是返回一个空数组。我可以使用模板中的AccountGroupController迭代{{#each}}中的项目。但是,一切都可以从AccountLinkController中正常工作。

我在这两者之间能够想到的唯一区别是该页面是由AccountLinkRoute设置的,因此必须有一些Ember Magic设置AccountLinkController,而AccountGroupController不会发生{{1}} 1}}。

有什么想法可以解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

你在正确的道路上。 ember工作流程在这里非常重要。导航到URL时,Ember会解析URL并将其映射到路由器。此时,Ember知道需要从作为URL一部分的每个资源/路由中获取模型。一旦它取出所有这些模型,它就会用相关的控制器装饰它们。这里右边描述了您的问题所在。仅使用控制器不会导致获取模型。

如果您想使用特定的控制器,可以使用controllerFor并手动获取模型。

 // get some model
 var controller = this.controllerFor('accountGroup');
 controller.set('model', model);
 @render('account/link/groups', {
    into : 'account/link'
    outlet : 'workbench'
    controller : controller
  })