[英]Ember-data computed property on an async relationship
I have some models set up with async relationships, eg: 我有一些模型设置了异步关系,例如:
User = DS.Model({
postsApproved: DS.hasMany('post', {async: true, inverse: 'approved'})
})
Post = DS.Model({
approver: DS.belongsTo('user', {async: true, inverse: 'postsApproved'})
})
In a controller, I have a property on the post, isApproved
, which simply checks if approver
is set. 在控制器中,我在帖子上有一个属性isApproved
, isApproved
检查是否设置了approver
。 I expect that this should work: 我希望这应该有效:
isApproved: function() {
return !Ember.isNone(this.get('approver'));
}
But that always returns true, and if I inspect the data I see that it is because this.get('approver')
returns a promise. 但是这总是返回true,如果我检查数据,我发现这是因为this.get('approver')
返回一个promise。 This works: 这有效:
isApproved: function() {
return !Ember.isNone(this.get('approver.content'));
}
But using content
seems to me to be messing around with the internals a bit too much. 但是在我看来,使用content
有点太过分了。 Is this the right way to do it, or am I missing something? 这是正确的做法,还是我错过了什么?
You are right, testing for this.get('approver.content')
is not correct, as the element may actually have an associated approver
, but it may not be loaded yet. 你是对的,测试this.get('approver.content')
是不正确的,因为该元素实际上可能有一个关联的approver
,但它可能尚未加载。
Try to load the related model on the route: 尝试在路线上加载相关模型:
// route.js
model: function(params) {
return this.store.find('post', params.post_id).then(function(post) {
return Ember.RSVP.hash({
post: post,
approver: post.get('approver')
});
});
},
setupController: function(controller, model) {
controller.set('model', model.post);
controller.set('approver', model.approver);
},
// controller.js
isApproved: function() {
return !Ember.isNone(this.get('approver'));
}.property('approver')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.