The itemController
从控制器和各个视图来看,没有关系。
尽管它做同样的事情:将对象包装在指定的控制器中。
你的第一个实现抛出Cannot call method 'lookup' of null
,因为container
的实例AddressesController
一片空白。当您通过其他容器创建控制器时,容器就会被设置。如果您使用以下内容,这是为您抽象的:
this.controllerFor('addresses')
代替
App.AddressesController.create ...
所以这个作品http://jsfiddle.net/marciojunior/GRaa5/ http://jsfiddle.net/marciojunior/GRaa5/
1)在#each处理程序中传递itemController
就像我之前说的,itemController
来自controller,和每个helper,没有关系。这样你就可以和他混了。
{{#each addresses itemController="address"}}
<li>{{line1}}, {{city}}</li>
{{/each}}
查看实际效果http://jsfiddle.net/marciojunior/spA9Q/ http://jsfiddle.net/marciojunior/spA9Q/
2)向ArrayController添加容器属性
这项工作因为我之前的解释,
因为container
的实例AddressesController
is null
完成 @colymba 示例是可行的,因为在 setupController 之前:
setupController: function(controller, model){
controller.set('content', model);
}
ember 在该钩子中提供一个控制器,使用controllerFor
,那么容器也存在于生成的控制器中。