2012-03-31 4 views
4

현재 StateManager를 사용하여 서버에 대한 세션 검사에 따라 활성화되어야하는 상태를 관리하는 데 어려움을 겪고 있습니다. 세션을 점검하고 signedout 또는 signedin 상태가 작동해야하는지 여부를 판별하는 시작 상태가 있다고 생각했을 것입니다.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 앱의 상태를 처리하는 데 선호되는 방법은 무엇입니까?

답변

1

초기 상태를 관리하는 방식에서 문제가 발생합니다. 상태를 정의하고 exit 상태를 정의하면 종료 전환을 처리하지 않습니다. 대신 start 상태를 선언

initialState: 'signedout', 

을, 또는 start 온 상태 exit 방법을 제공 :

당신은 다음과 같이 초기 상태를 선언 할 수 중 하나.

IMO를 사용하는 경우 더 좋은 방법은 코드 중복을 피하기 위해 initialState 속성을 사용하는 것입니다. 이미 경우에 불똥이 튄 가능성을 관리하려면, 당신은 내가 실제로뿐만 아니라 초기 상태로 시도했습니다 ... App.sessionControllerinit 방법 App.sessionController.signedIn 플래그의 초기 값으로

+0

를 처리 할 수있다. 문제는 서로의 상태에 대한 종료 프로세스가 실행되지 않는다는 것입니다. 초기 상태 이탈 프로세스 만 실행됩니다. 즉, 뷰가 제거되지 않은 ViewState를 사용하는 경우입니다. – digitaltoad

+0

이해가 안됩니다 ... 여기에서 작동하는 것 같습니다 : http://jsfiddle.net/MikeAski/SPfvg/ –

+0

미안하지만, 나는 더 잘 설명해야합니다. 나는 시작 상태를 가질 것이므로 초기 상태를 사용했습니다. 앱로드시 올바른 상태로 전달 이것은 다른 상태의 입력 프로세스 내에서 goToState를 사용하기 때문에 발생할 수있는 원치 않는 부작용을 유발합니다. 앱로드시 올바른 상태를 결정할 코드를 어디에 두어야하는지 잘 모르겠습니다. – digitaltoad

관련 문제