0

当我想在模型中使用会话数据(分配给用户的公司 ID)时,我遇到了 ember 问题。我正在使用带有 ember-simple-auth 的 ember-cli 和 ember 0.13.1。假设当我想显示有关用户被分配到的公司的信息时,我有一条称为用户/个人资料的路线。为此,我需要从会话中检索分配给用户的 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') 未定义。

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

最好的问候帕维尔

4

3 回答 3

0

看来您需要查看 session.content 设置(当然,如果您没有在用户/配置文件路由中覆盖 beforeModel 挂钩)。

如果您的情况有两步数据获取,则需要在用户/配置文件模型挂钩中等待会话数据,然后才能获取 user.companyId。

于 2015-08-20T12:42:02.113 回答
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?

于 2015-08-20T12:59:02.777 回答
-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);
  }
});
于 2017-01-27T14:57:14.590 回答