Ember.js获取每个项目的复合数据

时间:2014-03-13 11:57:09

标签: ember.js ember-data

我正在尝试使用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()什么,我应该传递给它吗?

1 个答案:

答案 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