2015-08-20 2 views
0

У меня проблема с ember, когда я хочу использовать данные сеанса (companyId, назначенные пользователю) в модели. Я использую ember-cli и ember 0.13.1 с ember-simple-auth. Допустим, у меня есть маршрут под названием user/profile, когда я хочу показать информацию о компании, которой назначен пользователь. Для этого мне нужно получить companyId, который назначен пользователю из сеанса и сделать вызов с моделью в мой API. В настоящее время маршрут для пользователя/профиль выглядит следующим образом:Модель Ember с данными сеанса

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') не определено.

Есть ли у кого-нибудь идеи, как я могу решить эту проблему?

С наилучшими пожеланиями Pawel

+0

Если пользователь может получить доступ к своей компании, вы можете решить эту проблему на бэкэнд: определить, какой пользователь запрашивает информацию и вернуть свою компанию. –

+0

Спасибо за ваш ответ, но я не хочу делать это в своем бэкэнде, потому что я использую тот же запрос и в других маршрутах. Мне интересно, должен ли я вводить сеанс в модель, но я нашел в простом форуме, что это не предлагается. Другое дело, что я регистрирую пользователя с обещанием, а это означает, что модели из маршрута пользователя/профиля будут выполняться после того, как это обещание будет разрешено. – owenek1

ответ

0

Это кажется, что вы должны смотреть в session.content настройки (если вы не перекрывая beforeModel крюк в пользовательском/профиле маршрута, конечно).

Если в вашем случае есть выбор из двух шагов, вам нужно дождаться данных сеанса в крючке модели пользователя/профиля, и только после этого вы можете получить user.companyId.

+0

Я опубликовал свое решение, но оно работает неправильно. Я не мог найти решение, чтобы подождать, пока сессия будет установлена ​​в beforeModel. Не могли бы вы привести мне пример, как я могу это сделать? Благодаря! – owenek1

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?

0

Если кто-то все еще борется с проблемой, описанной выше. Это решение:

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); 
    } 
}); 
+0

Предложение: попробуйте 'controller.setProperties (model)' вместо того, чтобы устанавливать его отдельно. – kumkanillam

Смежные вопросы