2
我创建了一个Session
对象:Ember.js:不能访问注入对象
App.Session = Ember.Object.extend({
user: null,
userID: '',
});
我注入这个对象:
Ember.Application.initializer({
name: 'login',
initialize: function (container, application) {
App.register('session:main', App.Session, { instantiate: false, singleton: true });
// Add `session` object to route to check user
App.inject('route', 'session', 'session:main');
// Add `session` object to controller to visualize in templates
App.inject('controller', 'session', 'session:main');
App.register('firebase:main', App.Firebase);
// Add `session` object to route to check user
App.inject('route', 'firebase', 'firebase:main');
// Add `session` object to controller to visualize in templates
App.inject('controller', 'firebase', 'firebase:main');
}
});
我想要的Session
的userID
属性设置的标识当前用户如下:
Ember.Route.reopen({
beforeModel: function (transition) {
var isAuth = false;
var user = '';
var store = this.store;
var _this = this;
var firebase = new Firebase("https://dynamicslife.firebaseio.com");
firebase.onAuth(function(authData) {
if (authData) {
isAuth = true;
_this.session.userID = authData.id; //THIS OPERATIONS IS NOT WORKING!!!!!!
} else {
isAuth = false;
}
});
// These routes you do not need to be logged in to access.
var openRoutes = ['home','index','about','stories'];
var testMode = false;
if (testMode == false) {
if (openRoutes.indexOf(transition.targetName) === -1 && isAuth === false) {
console.log('Please login to access this information');
this.transitionTo('stories');
}
}
}
});
在代码表达式中标识出通过://THIS OPERATIONS IS NOT WORKING!!!!!!
,authData.id
包含正确的ID值。但_this.session.userID
仍未定义。
我试图用_this.session.set('userID', authData.id);
代替_this.session.userID = authData.id;
,但是这给了我同样的错误。
我认为也许Session对象不会被注入Ember.Route.reopen
。如果是这种情况,我如何才能从Ember.Route.reopen
访问Session对象?
因为session.userID
是不确定的,我得到以下错误:
Error while processing route: statistics.index session is not defined ReferenceError: session is not defined
当灰烬运行此:
App.StatisticsRoute = Ember.Route.extend({
model: function() {
return this.store.find('user', session.userID);
},
});
谢谢!你的答案是正确的。问题是否可以:是'App.register('session:main',App.Session.create(),{instantiate:false,singleton:true});'相当于'App.register('session:main', App.Session,{singleton:true});'? – 2014-10-28 02:07:37
事实上,它和App.register('session:main',App.Session)一样;'因为singleton:true是默认值;)但是我从不回避在学习时明确定义的东西。 – Kingpin2k 2014-10-28 05:02:46
谢谢。很有帮助。 – 2014-10-29 00:36:23