2012-03-31 13 views
4

現在、StateManagerを使用してサーバのセッションチェックに応じてどの状態をアクティブにするべきかを管理するのに問題があります。私は、セッションをチェックし、サインアウト状態またはサインイン状態がアクティブでなければならないかどうかを判断する開始状態を持つと考えました。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(); 

これを実行すると、正しく実行されないexitが発生しているようです。だから私は、認証が必要なEmber.jsアプリケーションの状態を処理するのに好ましい方法(私の見解では間違っていると思われます)は何ですか?

答えて

1

問題は初期状態を管理する方法に由来します:状態がメソッドではないと定義すると、終了トランジションは処理されません。

あなたは次のように初期状態を宣言することができ、次のいずれかの代わりにstart状態を宣言する

initialState: 'signedout', 

、またはstart状態にexit方法を提供します。

IMOでは、コードの重複を避けるため、initialStateプロパティを使用することをお勧めします。 が既に場合に調印可能性を管理するには、私が実際にも、初期状態で試してみた... App.sessionControllerinit方法でApp.sessionController.signedInフラグの初期値で

+0

を扱うことができます。問題は、互いの状態の出口プロセスが実行されないことにあります。初期状態の終了プロセスのみが実行されます。これは、ビューが削除されていないViewStateを使用していた場合に発生します。 – digitaltoad

+0

私は理解していない...それはここで働くようです:http://jsfiddle.net/MikeAski/SPfvg/ –

+0

申し訳ありませんが、私はより良い説明をすべきでした、私は開始状態を持っていたので、私は初期状態を使用したアプリの読み込み時に正しい状態にディスパッチします。これは、別の状態の入力プロセス内でgoToStateを使用することによるものと思われる、望ましくない副作用を引き起こしています。私はアプリの読み込み時に正しい状態を決定するコードをどこに置くべきかわかりません。 – digitaltoad