我在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')
});
从会议控制器中的路由会议/:id,我希望能够遍历讨论集合,为每个实例设置新的讨论控制器。然后我需要能够遍历每个讨论评论,再次做同样的事情。目前我似乎能够访问关联中定义的属性,但是如果我调用计算属性,则会返回不正确的结果(例如,当它应为5时,计数为0)。我认为这个问题与控制器的上下文有关,因为我似乎无法在控制器中返回该对象的值。它可能非常简单,但我看不到它。我做错了什么?
以下是控制器:
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}}
和discussion.hbs模板一起工作:
<div>
{{ comments.length }}
</div>
但这不是:
<div>
{{ commentCount }}
</div>
我哪里错了?
答案 0 :(得分:6)
我认为问题在于您如何定义计算属性,看起来绑定不起作用。
请尝试使用.property('comments.@each')
:
App.DiscussionController = Ember.ObjectController.extend({
commentCount: function(){
return this.get('comments.length');
}.property('comments.@each')
});
App.DiscussionController = Ember.ObjectController.extend({
commentCount: Ember.computed.oneWay('comments.length')
});