我正在尝试使用Ember.js构建以下视图:
Users: (x in total)
* User 1: y Posts
* User 2: z Posts
我创建了一个itemController
,负责获取每个用户的帖子数量。
App.IndexItemController = Ember.ObjectController.extend({
postCount: function() {
var posts = this.get('content').get('posts');
return posts.get('length');
}.property()
});
jsbin上的完整代码。
不知何故,我总是为每个用户收到0个帖子,我想这是因为this.get('content').get('posts')
处的关系无法正确解决。这样做的正确方法是什么?还是我走错了路?
奖金问题:我可以传递给property()
什么,我应该传递给它吗?
答案 0 :(得分:1)
在您的案例content.posts.length
中,您需要设置计算属性的从属键。因此postCount
知道何时需要更新。
App.IndexItemController = Ember.ObjectController.extend({
postCount: function() {
var posts = this.get('content').get('posts');
return posts.get('length');
}.property('content.posts.length')
});
现在您的计算属性是正确的,但没有加载数据,这是因为没有与您的用户相关联的帖子,user -> post
方向没有。所以你需要将它添加到灯具中:
App.User.FIXTURES = [
{
id: 1,
name: 'Jon',
nick: 'Jonny',
posts: [1]
},
{
id: 2,
name: 'Foo',
nick: 'Bar',
posts: [2]
}
];
此后会引发错误Uncaught Error: Assertion Failed: You looked up the 'posts' relationship on '<App.User:ember280:1>' but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (`DS.hasMany({ async: true })`)
。
Ember数据确定您有异步关系,并警告您使用async: true
设置属性
App.User = DS.Model.extend({
name: DS.attr('string'),
nick: DS.attr('string'),
posts: DS.hasMany('post', { async: true })
});
这是您更新的jsbin