1

我有一个 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');
        }
    }),
});
4

1 回答 1

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';
    },

    // ...
});
于 2012-12-07T13:32:37.600 回答