如何动态检测Ember.StateManager应该具有哪个初始状态?

时间:2012-12-07 13:32:38

标签: ember.js

我有一个Ember.StateManager来管理登录用户的会话。如何在用户访问页面时检测用户是否已登录,以便设置initialState属性? (因为他们可能已经登录过,但仍然拥有cookie)

App.userSessionStateManager = Em.StateManager.create({
    initialState: 'signedout', // this should be dynamic

    signedin: Em.State.createWithMixins({
        enter: function(sm) {
            this._super(sm);
            console.log('entered signedin state');
        },
        exit: function(sm) {
            this._super(sm);
            console.log('exited signedin state');
        }
    }),

    signedout: Em.State.createWithMixins({
        enter: function(sm) {
            this._super(sm);
            console.log('entered signedout state');
        },
        exit: function(sm) {
            this._super(sm);
            console.log('exited signedout state');
        }
    }),
});

1 个答案:

答案 0 :(得分:1)

与Ember.js中的许多课程一样,您可以创建自己的init()函数来进行自己的设置。这样您就可以决定将initialState属性设置为什么。但是,请务必使用init()调用父类的this._super()函数,以便它也可以执行默认初始化。

修改:自Ember.js API最近更新以来,您需要使用createWithMixins()而非create()才能调用_super个功能。

App.userSessionStateManager = Em.StateManager.createWithMixins({
    init: function() {
        this._super();

        // your login detection routine here
        if (user.signedin)
            this.initialState = 'signedin';
        else
            this.initialState = 'signedout';
    },

    // ...
});