带有会话数据的灰烬模型

时间:2015-08-20 08:56:21

标签: session ember.js model ember-simple-auth ember-model

当我想在模型中使用会话数据(分配给用户的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')。

有人知道如何解决这个问题吗?

祝你好运 帕维尔

3 个答案:

答案 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);
  }
});