按照Ember上的示例在我的ArrayController定义中设置itemController会导致阻塞错误消息:
TypeError: Cannot call method 'lookup' of null
Run Code Online (Sandbox Code Playgroud)
JSFiddle:http://jsfiddle.net/jgillick/M4BVV/
// Addresses array controller
App.AddressesController = Ember.ArrayController.extend({
itemController: 'address'
});
// Address object controller
App.AddressController = Ember.ObjectController.extend({
city: function(){
return "San Francisco";
}.property()
});
Run Code Online (Sandbox Code Playgroud)
我找到解决这个问题的唯一方法是......
{{#each addresses itemController="address"}}
<li>{{line1}}, {{city}}</li>
{{/each}}
Run Code Online (Sandbox Code Playgroud)
...要么...
var addresses = App.AddressesController.create({
container: indexController.get('container'),
content: [
App.Address.create({'line1': '700 Hansen Wy'}),
App.Address.create({'line1': '900 Hansen Wy'})
]
});
Run Code Online (Sandbox Code Playgroud)
这两种解决方案都感觉很乱,而且非常错误.在ArrayController本身设置itemController我做错了什么?
该itemController
从控制器和每个视图,没有关系.虽然它做同样的事情:在指定的控制器中包装一个对象.
您的第一个实现抛出Cannot call method 'lookup' of null
,因为该container
实例AddressesController
为null.当您通过其他容器创建控制器时,将设置容器.如果你使用的话,这是抽象的:
this.controllerFor('addresses')
Run Code Online (Sandbox Code Playgroud)
代替
App.AddressesController.create ...
Run Code Online (Sandbox Code Playgroud)
所以这项工作http://jsfiddle.net/marciojunior/GRaa5/
1)在#each处理程序中传递itemController
就像我之前说过的,itemController
从控制器和每个助手,没有关系.所以你可以混合他.
{{#each addresses itemController="address"}}
<li>{{line1}}, {{city}}</li>
{{/each}}
Run Code Online (Sandbox Code Playgroud)
在http://jsfiddle.net/marciojunior/spA9Q/中查看此操作
2)向ArrayController添加容器属性
这项工作是因为我之前的解释,
因为该
container
实例AddressesController
为null
完成@colymba示例有效,因为在setupController之前:
setupController: function(controller, model){
controller.set('content', model);
}
Run Code Online (Sandbox Code Playgroud)
ember使用the在该钩子中提供控制器controllerFor
,然后容器也存在于生成的控制器中.
归档时间: |
|
查看次数: |
4664 次 |
最近记录: |