我有一些模型设置了异步关系,例如:
User = DS.Model({
postsApproved: DS.hasMany('post', {async: true, inverse: 'approved'})
})
Post = DS.Model({
approver: DS.belongsTo('user', {async: true, inverse: 'postsApproved'})
})
在 Controller 中,我在帖子上有一个属性,isApproved
,它只是检查是否设置了 approver
。我希望这应该有效:
isApproved: function() {
return !Ember.isNone(this.get('approver'));
}
但这总是返回 true,如果我检查数据,我会发现这是因为 this.get('approver')
返回了一个 promise 。这有效:
isApproved: function() {
return !Ember.isNone(this.get('approver.content'));
}
但在我看来,使用 content
似乎有点太乱搞内部结构了。这是正确的方法吗,还是我遗漏了什么?
最佳答案
你是对的,测试 this.get('approver.content')
是不正确的,因为该元素实际上可能有一个关联的 approver
,但它可能尚未加载。
尝试在路由上加载相关模型:
// 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')
关于javascript - 异步关系上的 Ember 数据计算属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26565291/