Ember.js StateManager用于会话管理

前端之家收集整理的这篇文章主要介绍了Ember.js StateManager用于会话管理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前无法使用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应用程序的状态的首选方法(正如我的显然是错误的)是什么?

解决方法

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

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

initialState: 'signedout',

而不是声明启动状态,或者在启动状态下提供退出方法.

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

原文链接:https://www.f2er.com/js/646139.html

猜你在找的JavaScript相关文章