繁体   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