簡體   English   中英

Ember StateManager無法准確反映currentState

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM