当我想在模型中使用会话数据(分配给用户的companyId)时,我遇到了ember的问题。我正在使用ember-cli和ember 0.13.1和ember-simple-auth。让我们说当我想显示有关用户被分配到的公司的信息时,我有一条名为user / profile的路由。为了做到这一点,我需要检索从会话分配给用户的companyId,并使用模型调用我的API。目前,用户/个人资料的路线如下:
import Ember from 'ember';
import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
export default Ember.Route.extend(AuthenticatedRouteMixin, {
model: function() {
return Ember.RSVP.hash({
industries: this.store.findAll('industry'),
industryroles: this.store.findAll('industryrole'),
company: this.store.find('company',this.session.get('user.companyId'))
});
},
setupController: function(controller, model) {
controller.set('industries', model.industries);
controller.set('industryroles', model.industryroles);
controller.set('company', model.company);
}
});
当您从不同路线前往该路线时,一切正常,但当您处于用户/个人资料路线并且按F5时,则未定义this.session.get('user.companyId')。
有人知道如何解决这个问题吗?
祝你好运 帕维尔
答案 0 :(得分:0)
似乎你需要查看session.content设置(如果你没有覆盖用户/配置文件路由中的beforeModel钩子,当然)。
如果您的案例中有两个步骤数据提取,则需要在user / profile模型钩子中等待会话数据,然后才能获得user.companyId。
答案 1 :(得分:0)
我提出了一些解决方案。我在用户/配置文件的路由中为session.user.companyId设置了一个观察者。所以目前我的路线看起来像这样:
//app/routes/user/profile.js
import Ember from 'ember';
import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
export default Ember.Route.extend(AuthenticatedRouteMixin, {
onSessionIsAuthenticated: function () {
var isAuthenticated = this.get('session.isAuthenticated');
if (!isAuthenticated) {
return false;
}
var _this = this;
return Ember.RSVP.hash({
company: _this.store.find('company',this.get('session.user.companyId')).then(function (data) {
_this.controllerFor('user.profile').set('company', data);
})
});
}.observes('session.user.companyId'),
model: function() {
return Ember.RSVP.hash({
industries: this.store.findAll('industry'),
industryroles: this.store.findAll('industryrole')
});
},
setupController: function(controller, model) {
controller.set('industries', model.industries);
controller.set('industryroles', model.industryroles);
}
});
其他行业和行业角色仍留在控制器中。现在一切似乎都正确,但我不确定这是否是解决此问题的正确方法。我不确定这是不是你的想法@Microfed?
答案 2 :(得分:-1)
如果有人仍在努力解决上述问题。这是解决方案:
import Ember from 'ember';
import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
export default Ember.Route.extend(AuthenticatedRouteMixin, {
model: function() {
return Ember.RSVP.hash({
industries: this.store.findAll('industry'),
industryroles: this.store.findAll('industryrole'),
company: this.store.find('company', this.get('session.data.user.companyId'))
});
},
setupController: function(controller, model) {
controller.set('industries', model.industries);
controller.set('industryroles', model.industryroles);
controller.set('company', model.company);
}
});