Ember:在 ArrayController 中使用 itemController 不起作用(TypeError:无法调用 null 的“lookup”方法)

2024-01-06

按照以下示例Ember http://emberjs.com/api/classes/Ember.ArrayController.html在我的 ArrayController 定义中设置 itemController 会导致阻塞错误消息:

TypeError: Cannot call method 'lookup' of null

JSFiddle:http://jsfiddle.net/jgillick/M4BVV/ 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()
});

我发现解决这个问题的唯一方法是......

1)在#each处理程序中传递itemController(jsfiddle http://jsfiddle.net/jgillick/M4BVV/5/):

{{#each addresses itemController="address"}}
    <li>{{line1}}, {{city}}</li>
{{/each}}

...or...

2)向ArrayController添加一个容器属性(jsfiddle http://jsfiddle.net/jgillick/M4BVV/6/):

var addresses = App.AddressesController.create({
    container: indexController.get('container'),
    content: [
        App.Address.create({'line1': '700 Hansen Wy'}),
        App.Address.create({'line1': '900 Hansen Wy'})
    ]
});

这两种解决方案都让人感觉很笨拙而且非常错误。我在 ArrayController 本身中设置 itemController 做错了什么?


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,那么容器也存在于生成的控制器中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ember:在 ArrayController 中使用 itemController 不起作用(TypeError:无法调用 null 的“lookup”方法) 的相关文章

随机推荐