4
我目前在使用狀態管理器來管理哪個狀態應該處於活動狀態時會遇到麻煩,這取決於對服務器的會話檢查。我會想到有一個開始狀態來檢查會話,並確定簽名或簽名狀態是否應該有效。Ember.js用於會話管理的StateManager
App = Ember.Application.create();
App.sessionController = Ember.Object.create({
signedIn: false,
isSignedIn: function() {
return this.signedIn;
},
signOut: function() {
this.signedIn = false;
App.stateManager.goToState('signedout');
},
signIn: function() {
this.signedIn = true;
App.stateManager.goToState('signedin');
}
});
App.stateManager = Ember.StateManager.create({
start: Ember.State.create({
enter: function(sm) {
this._super(sm);
if (App.sessionController.isSignedIn()) {
sm.goToState('signedin');
} else {
sm.goToState('signedout');
}
}
}),
signedin: Ember.State.create({
enter: function(sm) {
this._super(sm);
console.log('entered signedin state');
},
exit: function(sm) {
this._super(sm);
console.log('exited signedin state');
}
}),
signedout: Ember.State.create({
enter: function(sm) {
this._super(sm);
console.log('entered signedout state');
},
exit: function(sm) {
this._super(sm);
console.log('exited signedout state');
}
})
});
App.sessionController.signIn();
這樣做似乎導致出口沒有正確執行。所以我問,處理需要身份驗證的Ember.js應用程序的狀態的首選方式是什麼(正確,因爲我的顯然是錯誤的)?
其實我已經有一個初始狀態嘗試爲好。問題出現在每個其他狀態的退出進程沒有執行。只有初始狀態退出進程被執行。這意味着如果我使用的視圖不被刪除的ViewState。 – digitaltoad 2012-03-31 14:08:27
我不明白...它似乎在這裏工作:http://jsfiddle.net/MikeAski/SPfvg/ – 2012-03-31 15:35:15
對不起,我應該更好地解釋,我用一個初始狀態,因爲我會有一個開始狀態,以在應用程序加載時調度到正確的狀態。這導致了不希望的副作用,我認爲這可能是由於在另一個狀態的進入過程中使用了goToState。我只是不確定應該在哪裏放置代碼來確定應用程序加載時的正確狀態。 – digitaltoad 2012-03-31 18:42:47