我有一个像这样的初始化程序:
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
就会在用户交互时被调用。只有最后一个容器查找给出了 store,其他 2 个是一个对象:
{
_lastData: Object,
key: "ember_simple_auth:session"
[..]
}
发生什么事了?为什么我无法注入(inject)商店?
最佳答案
这是因为当前版本的 simple-auth 中的存储被具有 session 存储的实例初始化程序覆盖。 simple-auth 的下一个主要版本将把 session 存储变成一项服务,我们将能够做到:
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)
});
}
})
});
来自the dummy app ,一次https://github.com/simplabs/ember-simple-auth/pull/602已合并。
关于ember.js - 为什么我必须在简单例份验证自定义 session 上查找存储而不是将其作为服务注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31901932/