繁体   English   中英

Ember.js StateManager用于会话管理

[英]Ember.js StateManager for session management

我目前无法使用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应用程序的状态的首选方法(正如我的显然是错误的)是什么?

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

你可以声明初始状态如下:

initialState: 'signedout',

代替宣布start状态,或提供一个exit上的方法start状态。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM