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

How to access ember model relation properties in routes/controllers?

本文关键字:ember 访问 模型 关系 属性 控制器 路由      更新时间:2023-09-26

我正在使用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(…)。Then不是函数

我建议试试:

1)用this.set('organization', user.get('organization'));代替this.set('organization', user.organization);

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