2

我在 Ember 中定义了三个模型,并且都根据请求返回 json:

App.Comment = DS.Model.extend({
    discussion: DS.belongsTo('App.Discussion')
});

App.Discussion = DS.Model.extend({
    meeting: DS.belongsTo('App.Meeting'),
    comments: DS.hasMany('App.Comment')
});

App.Meeting = DS.Model.extend({
    discussions: DS.hasMany('App.Discussion')
});

从会议控制器中的路由 meeting/:id 我希望能够遍历讨论的集合,为每个实例设置一个新的讨论控制器。然后我需要能够遍历每个讨论评论,再次做同样的事情。目前我似乎能够访问在关联上定义的属性,但是如果我调用计算属性,我会得到一个不正确的结果返回(例如计数为 0,而它应该是 5)。我认为问题与控制器的上下文有关,因为我似乎无法在控制器中返回该对象的值。这可能很简单,但我就是看不到。我究竟做错了什么?

以下是控制器:

App.MeetingController = Ember.ObjectController.extend({
    needs: ['discussion']
});

App.DiscussionController = Ember.ObjectController.extend({
    commentCount: function(){
        return this.get('comments.length');
    }.property('comments')
});

然后在 meeting.hbs 模板中:

{{#each discussion in discussions}}
    {{ render 'discussion' discussion }}
{{/each}}

和讨论.hbs 模板,这有效:

<div>
    {{ comments.length }}
</div>

但这不会:

<div>
    {{ commentCount }}
</div>

我哪里错了?

4

1 回答 1

6

我认为问题在于您如何定义计算属性,看起来绑定不起作用。

尝试.property('comments.@each')改用:

App.DiscussionController = Ember.ObjectController.extend({
  commentCount: function(){
    return this.get('comments.length');
  }.property('comments.@each')
});

2014 年 7 月 10 日更新:您现在可以使用:

App.DiscussionController = Ember.ObjectController.extend({
  commentCount: Ember.computed.oneWay('comments.length')
});
于 2013-05-01T13:37:53.807 回答