[英]Ember StateManager not reflecting currentState accurately
我開始構建一個非常基本的Ember.StateManager,並且在獲取准確的currentState時遇到問題。 我的理解是,當運行狀態的回調回調時, currentState.name
應該反映這個新狀態。
我正在使用ember-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實例作為其第一個參數調用其enter方法,並將表示轉換的對象作為其第二個參數。
謝謝!
看看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);
}
很明顯,在調用enter方法之后設置currentState
,這可以解釋你所看到的內容。
您可以通過在轉換后獲取控制台中的當前狀態名稱來確認。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.