簡體   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