Белый экран при использовании setActiveItem - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть окно просмотра с двумя элементами: форма аутентификации и панель вкладок. В методе initComponent этого окна просмотра я вызываю функцию, которая проверяет, вводил ли пользователь когда-либо свой логин и пароль.

Если нет, то появляется форма аутентификации, и когда он нажимает кнопку входа в систему, появляется панель вкладок.

Но если есть сохраненные учетные данные, я хочу, чтобы приложение автоматически переключалось на панель вкладок.

Вот как я хотел это сделать:

app.views.Viewport = function (config) {
    Ext.apply(this, config);

    this.user = null; // Setter par le checkLogin !

    this.bottomTabs = new Ext.TabPanel({
        tabBar: { 
            dock: 'bottom',
            layout: { pack: 'center' } 
        }, 
        items:[...],                             
        layout: 'fit',
        cardSwitchAnimation: false,
    });

    this.userLogin = new app.views.UserLogin();

    //constructor
    app.views.Viewport.superclass.constructor.call(this, {
        fullscreen: true,
        layout: 'card',
        cardSwitchAnimation: 'fade',
        items: [
            this.userLogin,
            this.bottomTabs
        ]
    });

};

Ext.extend(app.views.Viewport, Ext.Panel, {
    initComponent: function () {
        app.views.Viewport.superclass.initComponent.call(this);
        this.initialCheck();
    },

    initialCheck: function(){
        console.log('init');
        var credentials = window.localStorage.getItem("neroApp_credentials");
        if (credentials == null || credentials == "reset") {
            console.log('no creds');
            this.setActiveItem(this.userLogin); // ***
        }
        else {
            console.log('creds');
            Ext.Ajax.defaultHeaders = {'Authorization':"Basic " + credentials};
            this.checkLogin();
        }
    },

    checkLogin: function () {
        console.log('checkLogin');
        Ext.Ajax.request({
            url: app.stores.baseAjaxURL + '&jspPage=%2Fajax%2FgetUser.jsp',
            scope: this,
            success: function(response, opts) {
                console.log('success');
                var user = Ext.decode(response.responseText);
                this.user = user;
                this.actualites.actualitesList.refreshActu(this.user, parseInt(window.localStorage.getItem("newsPerLoad")));
                this.setActiveItem(this.bottomTabs, { type: 'fade', duration: 500 });
            },
            failure: function(response, opts) {
                console.log('failure');
            }
        });
    },

    resetLogin: function() {
        window.localStorage.setItem("neroApp_credentials", "reset");
        Ext.Ajax.defaultHeaders = {'Authorization':"Basic RESET_Credentials"};
    }

});

Но при запуске появляется белый экран из-за строки *. Я предполагаю, что это происходит слишком рано, возможно, потому что setActiveItem в функции checkLogin работает нормально.

У кого-нибудь есть идея, почему этот setActiveItem выдает ошибку?

Спасибо

1 Ответ

0 голосов
/ 17 февраля 2012

Хорошо, я не выяснил, в чем проблема, хотя я предполагаю, что запуск setActiveItem в initComponent не является хорошей практикой, но я наконец-то заработал, установив активный элемент так:

    initialCheck: function(){
        console.log('init');
        var credentials = window.localStorage.getItem("neroApp_credentials");
        if (credentials == null || credentials == "reset") {
            this.activeItem = this.userLogin;
        }
        else {
            this.activeItem = this.bottomTabs;
            Ext.Ajax.defaultHeaders = {'Authorization':"Basic " + credentials};
            this.checkLogin();
        }
    },
...