我的应用中有一个页面,旁边有控件,可让您选择是否要管理帐户或组。然后我在我的车把上有一个插座,我将为用户想要处理的内容呈现相应的模板:{{outlet workbench}}
。
这适用于帐户:
@render('account/link/workbench', {
into : 'account/link'
outlet : 'workbench'
controller : 'accountLink'
})
但是,对于团体来说,它有点破碎:
@render('account/link/groups', {
into : 'account/link'
outlet : 'workbench'
controller : 'accountGroup'
})
AccountLinkController
和AccountGroupController
都来自同一个基类 - TableController
- 这是一个ArrayController
。问题是,我无法迭代AccountGroupController
中的子控制器。 (即像this.map
这样的函数总是返回一个空数组。我可以使用模板中的AccountGroupController
迭代{{#each}}
中的项目。但是,一切都可以从AccountLinkController
中正常工作。
我在这两者之间能够想到的唯一区别是该页面是由AccountLinkRoute
设置的,因此必须有一些Ember Magic设置AccountLinkController
,而AccountGroupController
不会发生{{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
})