Почему я должен использовать хранилище поиска в своем пользовательском сеансе с простой аутентификацией, а не внедрять его как службу?

У меня есть такой инициализатор:

import Ember from 'ember';
import Session from 'simple-auth/session';

var SessionWithCurrentUser = Session.extend({
  store: Ember.inject.service(),
  currentUser: function() {
    console.log(this.get('store'));
    console.log(this.store);
    console.log(this.container.lookup('service:store'));
  }.property('secure.access_token')
});

export default {
  name: 'custom-session',
  after: 'ember-data',
  initialize(registry) {
    registry.register('session:withCurrentUser', SessionWithCurrentUser);
  }
};

currentUser вызывается при взаимодействии с пользователем спустя много времени после завершения загрузки моего приложения. Только последний поиск контейнера дает хранилище, остальные 2 являются объектами:

{
 _lastData: Object,
 key: "ember_simple_auth:session"
 [..]
}

Что происходит? Почему я не могу залить магазин?


person Kit Sunde    schedule 09.08.2015    source источник
comment
потому что store также используется simple-auth как localStorage. Пример внедрения здесь: stackoverflow.com/a/30894082/4950029   -  person artych    schedule 09.08.2015
comment
@Artych А, это имеет смысл. Интересно, что наименее удивительно: инъекция _store или поиск контейнера. Я полагаю, я просто буду придерживаться поиска. Если вы поместите это в ответ, я приму это.   -  person Kit Sunde    schedule 09.08.2015
comment
Стоит проверить, работает ли _store: Ember.inject.service('store') или что-то подобное для современного ED для хорошего ответа. У меня нет времени копаться.   -  person artych    schedule 09.08.2015
comment
@Artych Неважно, они меняют его на сервис, и в ближайшем будущем он будет работать как положено.   -  person Kit Sunde    schedule 09.08.2015


Ответы (1)


Это связано с тем, что хранилище в текущей версии простой аутентификации переопределяется инициализатором экземпляра с хранилищем сеанса. Следующая основная версия simple-auth превратит хранилище сеансов в службу, и мы сможем:

import Ember from 'ember';

const { service } = Ember.inject;

export default Ember.Service.extend({
  session: service('session'),
  store: Ember.inject.service(),

  account: Ember.computed('session.content.secure.account_id', function() {
    const accountId = this.get('session.content.secure.account_id');
    if (!Ember.isEmpty(accountId)) {
      return DS.PromiseObject.create({
        promise: this.get('store').find('account', accountId)
      });
    }
  })
});

Из фиктивного приложения, один раз https://github.com/simplabs/ember-simple-auth/pull/602 объединены.

person Kit Sunde    schedule 09.08.2015