如何在路由/控制器中访问ember模型关系属性
How to access ember model relation properties in routes/controllers?
我正在使用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);
之后,查看输出
- Ember JS属性访问器
- Ember访问公共路由/控制器mxiin中的控制器属性
- 在ember.js中访问模型之外的计算属性
- Ember无法访问动态段参数
- 通过访问Ember.ArrayController获取话语中徽章的列表
- 访问ember中的动态输入值#ember中每个块
- 如何在 ember.js 中访问路由文件中的 :id 参数
- 限制对 Ember.js (Ember.Router) 中特定路由的访问
- Ember.js:使当前用户全局可访问
- 如何通过 Ember.TextField 中的 insertNewline 事件访问 Ember.Checkbox ch
- 访问 Ember.js 中的另一个模型数据
- 从另一个具有属于关系的模型访问模型属性 Ember.js
- 使用 Ember js 从非嵌套路由访问路由模型
- 使用 jQuery/Ember 框架访问已删除的项目
- 如何从 Ember 应用程序模板中的路由访问数据
- Ember.js:如何访问嵌套视图实例
- Mixin 中的 Ember 访问变量
- 如何在 ember.js 中访问类似对象/值的数组
- 如何在集成测试中访问ember数据存储实例
- Ember.js-动态访问路由中的查询参数