Sencha Touch:在注销时销毁面板

时间:2014-09-01 08:55:59

标签: extjs sencha-touch-2 sencha-touch-2.1

当用户退出时,我想删除所有面板,特别是在登录页面之后删除应用程序的主要条目,即" Main.js"及其子视图,如“我的数据”和#39;您在下面看到的原因是我想确保加载正确的商店数据而不显示旧数据。

但是,我不确定如何执行此操作以及在用户注销时卸载存储/删除视图的最佳做法。

处理用户注销的最佳做法是什么?

Main.js

Ext.define('app.view.Main', {

extend: 'Ext.tab.Panel',

xtype: 'main',

requires: [
    'app.view.TeacherPanel',
    'app.view.ParentPanel',
    'app.view.AboutPanel',
    'app.view.user.Profile'
],

config: {

    tabBarPosition: 'bottom',

},

initialize: function() {

    console.log('main.initialize');

    this.callParent(arguments);

    // add data panel
    var dataPanel = {
        title: 'My Data',
        iconCls: 'home',
        xtype: eMaliApp.services.App.getActivePanel()
        store: 'somestore' // i want this to be reloaded
    };
    this.add(dataPanel);

    // add user panel
    var profilePanel = {
        title: 'Profile',
        iconCls: 'user',
        xtype: 'userprofile'
    };
    this.add(profilePanel);

    // add about panel
    var aboutPanel = {
        title: 'About',
        iconCls: 'info',
        xtype: 'aboutpanel'
    };
    this.add(aboutPanel);

    // Load general app data
    app.services.Store.loadSomeStores();
}

});

Profile.js

onLogoutTap: function(e) {
    Ext.Ajax.request({
        url: 'session/mobileLogout',
        method: 'POST',
        useDefaultXhrHeader: false,
        withCredentials: true,
        callback: function(options, success, response) {
            if (!success) {
                console.log('Logout failed, redirecting to login page anyway');
            }
            //Ext.getCmp('main').destroy(); // should be so
            Ext.Viewport.removeAll(true, true); // does not remove main
            Ext.Viewport.add(Ext.create('app.view.LoginPanel'));
        }
    });
}

1 个答案:

答案 0 :(得分:1)

通常我会销毁所有关于停用的视图

Ext.define('App.controller.View', {
extend: 'Ext.app.Controller',

config: {
    refs: {
        view: '.whatever your view is comes here. Take a look at autocreate.'
    },
    control: {
        view: {
            deactivate: 'onViewDeactivate'
        }
    }
},

onViewDeactivate: function (view) {
    Ext.defer(function () {
        view.destroy();
    }, 500);
},

这将在500ms(动画所需的时间)之后销毁当前视图。有一个地方,你做这件事是件好事。

但回到你的例子:

 var items = Ext.Viewport.getItems();

现在迭代到所有项目并销毁它们。