我有一个Ember.StateManager来管理登录用户的会话。如何在用户访问页面时检测用户是否已登录,以便设置initialState属性? (因为他们可能已经登录过,但仍然拥有cookie)
App.userSessionStateManager = Em.StateManager.create({
initialState: 'signedout', // this should be dynamic
signedin: Em.State.createWithMixins({
enter: function(sm) {
this._super(sm);
console.log('entered signedin state');
},
exit: function(sm) {
this._super(sm);
console.log('exited signedin state');
}
}),
signedout: Em.State.createWithMixins({
enter: function(sm) {
this._super(sm);
console.log('entered signedout state');
},
exit: function(sm) {
this._super(sm);
console.log('exited signedout state');
}
}),
});
答案 0 :(得分:1)
与Ember.js中的许多课程一样,您可以创建自己的init()
函数来进行自己的设置。这样您就可以决定将initialState属性设置为什么。但是,请务必使用init()
调用父类的this._super()
函数,以便它也可以执行默认初始化。
修改:自Ember.js API最近更新以来,您需要使用createWithMixins()
而非create()
才能调用_super
个功能。
App.userSessionStateManager = Em.StateManager.createWithMixins({
init: function() {
this._super();
// your login detection routine here
if (user.signedin)
this.initialState = 'signedin';
else
this.initialState = 'signedout';
},
// ...
});