2012-12-12 26 views
1

我開始構建一個非常基本的Ember.StateManager,並且在獲取準確的currentState時遇到問題。我的理解是,當一個州進入回調時,currentState.name應該反映這個新的狀態。Ember StateManager不準確地反映currentState

我使用燼-1.0.0-pre.2.min.js

這裏是我的問題:

My.Tabs = { 
    init: function() { 
    MY.Tabs.stateManager.transitionTo('about'); 

    // this logs 'about' which is correct 
    console.log(this.stateManager.get('currentState.name')); 
    }, 

    stateManager: Em.StateManager.create({ 
    enableLogging: true, 
    start: Em.State.create({ 
     exit: function(stateManager) { 
     // this logs 'start' 
     console.log(stateManager.get('currentState.name'); 
     } 
    }), 
    about: Em.State.create({ 
     enter: function(stateManager) { 
     // ###### HERE's THE PROBLEM ###### 
     // this logs 'start'...at this point shouldn't this be 'about'? 
     // since I'm already in the enter callback? 
     console.log(stateManager.get('currentState.name'); 
     }, 
     exit: function(stateManager) { 
     return console.log("On about exit"); 
     } 
    }) 
    }) 
}; 

正如你可以看到,當我打電話transitionTo('about')和國家enter回調正在運行,currentState.name仍然反映原始狀態,start

只有在我的transitionTo('about')currentState.name準確。

我的期望是錯的,還是我做錯了什麼?

的文檔狀態:

轉換到一個新的狀態後,將新currentState將具有其稱爲與StateManager實例作爲第一個參數,並表示所述過渡作爲第二個參數的對象輸入方法。

謝謝!

回答

3

Looking at the source on github我看到

enterState: function(transition) { 
    var log = this.enableLogging; 

    var exitStates = transition.exitStates.slice(0).reverse(); 
    arrayForEach.call(exitStates, function(state) { 
     state.trigger('exit', this); 
    }, this); 

    arrayForEach.call(transition.enterStates, function(state) { 
     if (log) { Ember.Logger.log("STATEMANAGER: Entering " + get(state, 'path')); } 
     state.trigger('enter', this); 
    }, this); 

    set(this, 'currentState', transition.finalState); 
    } 

清楚了,currentState設置完成後需要輸入方法被調用,這可以解釋你所看到的。

您可以通過在轉換後在控制檯中獲取當前狀態名稱進行確認。

+0

這是我的下一步,檢查源代碼。謝謝你快速的回覆!我覺得這些文檔有點誤導性,因爲當你進入'currentState'的時候,它已經改變了。無論如何,還有一個'setup'回調函數,它在'enter'之後被調用並且具有新的狀態名稱。 – djibouti33

+0

@ djibouti33如果您可以改進,請提交文檔更改的拉取請求。 –