如何访问路由/控制器中的ember模型关系属性?

时间:2016-09-09 21:09:20

标签: javascript ember.js

我正在使用ember 2.7.0,我正在尝试使用从经过身份验证的令牌派生的currentUser.organization来设置我的ember应用程序。我能够解析currentUser,但是我无法在路由/控制器中解析用户组织的属性。

我的用户模型:

import DS from 'ember-data';

export default DS.Model.extend({
  name: DS.attr('string'),
  email: DS.attr('string'),
  organization: DS.belongsTo('organization', { polymorphic: true, async: false } )
});

我已经创建了一个服务,可以像这样拉动用户:

//app/services/session-account.js    
import Ember from 'ember';
    import jwtDecode from 'npm:jwt-decode';
    const { inject: { service }, RSVP } = Ember;
    export default Ember.Service.extend({
      session: service('session'),
      store: service(),
      loadCurrentUser() {
        return new RSVP.Promise((resolve, reject) => {
          const token = this.get('session.data').authenticated.access_token;
          if (!Ember.isEmpty(token)) {
            var token_payload = jwtDecode(token);
            return this.get('store').findRecord('user', token_payload.user_id, { include: 'organization' }).then((user) => {
              this.set('account', user);
              this.set('organization', user.organization);
              resolve();
            }, reject);
          } else {
            resolve();
          }
        });
      }
    });

我在用户登录后触发loadCurrentUser,并且我已经验证它成功从后端获取用户(并且组织数据包含在jsonapi响应中),但我可以将服务注入我的控制器/路由并访问用户并获取其直接属性,我无法访问相关组织的任何属性,通过myservice.get('currentUser.organization.name')(返回未定义)或myservice.get('currentOrganization.name'),它会抛出以下内容错误: Uncaught TypeError: Cannot read property '_relationships' of undefined

如果我将用户加载为模板中的user.organization的模型和引用属性,一切正常 - 但在javascript方面,我无法进入组织模型。

编辑:   我随后尝试了以下变体:

return this.get('store').findRecord('user', token_payload.user_id, { include: 'organization' }).then((user) => {
  this.set('currentUser', user);
  user.get('organization').then((organization) => {
    this.set('currentOrganization', organization);
  }, reject);
  resolve();
}, reject);

并且此版本(从ember指南关系文档中提取)抛出错误TypeError:user.get(...)。然后不是函数

1 个答案:

答案 0 :(得分:0)

我建议尝试:

1)将this.set('organization', user.organization);替换为this.set('organization', user.get('organization'));

2)在console.log(user.get('organization'))之后放this.set('account', user);并查看输出