javascript - 异步关系上的 Ember 数据计算属性

标签 javascript ember.js ember-data promise

我有一些模型设置了异步关系,例如:

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/

相关文章:

javascript - Ember Octane 升级如何将值从组件传递到 Controller

tomcat - Apache TOMCAT 上的 Ember-CLI

php - 问题,用其中的脚本回显 HTML,需要第三个 ' "

javascript - 找出在 Ember ArrayController 中更改的单个项目

javascript - 如何访问组件javascript文件中的属性?

javascript - 使用 ember.js 和 ember 数据添加 Preloader : Integrating NProgress. js

javascript - 从外部重新加载 Ember-Data

javascript - 为每个类单独继承静态成员

javascript - onclick 带有表单的下拉菜单,单击外部关闭

javascript - Bugsnag & Emberjs : application. 查找不是函数