Ember.js StateManager用于会话管理

时间:2012-03-31 00:49:07

标签: 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 个答案:

答案 0 :(得分:1)

问题来自您管理初始状态的方式:定义没有start方法的exit状态,您不处理退出转换。

您可以将初始状态声明如下:

initialState: 'signedout',

而不是声明start状态,或在exit州提供start方法。

IMO,更好的方法是使用initialState属性,因为您避免了代码重复。 要管理可能已经烧毁的情况,您可以在App.sessionController.signedIn的{​​{1}}方法中处理init标记的初始值...

相关问题