3

在 Ext jS中为标签添加书签需要一些帮助。

我有一个包含多个选项卡的选项卡面板,单击各个选项卡会更改 URL。我目前正在使用哈希。但是,当我使用它的“ id + delimiter + other id's ” URL 直接导航到页面时,我无法恢复应用程序。

这是示例代码:

launch : function() {
    Ext.state.Manager.setProvider(new Ext.state.CookieProvider(
            {
                expires : new Date(new Date().getTime()
                        + (1000 * 60 * 60 * 24 * 7))
            }));

var  tabPanel=new Ext.TabPanel({
    width:1000,
    title:'TabPanel',
    height:700,
    id:'main-tab',
    activeTab:0,
    layout:'fit',       
    region:'north', 
    stateful:true,
    stateId:'tp1',
    stateEvents:['tabchange'],
    getState:function(){
        return {
            activeTab:this.items.findIndex('id',this.getActiveTab().id)             
        };
    },
    applyState:function(s){
        this.setActiveTab(s.activeTab);
    },
    items:
        [
          //included tabID and title
         ],
     listeners:{            
                tabchange:function(tabPanel,currTab){                                       
                    window.location.hash='#myTabs/'+currTab.id; //config.position;
                    console.log(window.location);                   
                }
        }
});

var viewport=new Ext.Viewport({
    id:'main-viewport',     
    layout : 'fit',
    title:'Main',
    deferredRender:true,
    items : [ tabPanel ],
    width:200,
    region:'west'
});

viewport.doLayout();

expire我已经通过使用配置(使用Ext.state.Managerand )保存页面的当前状态来解决当前的问题Ext.state.CookieProvider

但是,我使用的 url 应该在任何时间长度内都有效

此外,如果我上次访问的 URL 是.../apps/Bookmarking/services.html#myTabs/5 并且我将我的 URL 更改回.../apps/Bookmarking/services.html,它应该回到我的默认值(在我的情况下是第一个)选项卡。相反,它导航回.../apps/Bookmarking/services.html#myTabs/5

我该如何纠正?

提前致谢!

PS:请查看此链接以了解我针对此问题所做的全部更改 http://www.sencha.com/forum/showthread.php?154174-Bookmarking-and-History-in-extjs

4

1 回答 1

0

我认为您在查看Ext.util.History时走在正确的轨道上。不幸的是,我认为您刚刚在他们的示例中发现了一个错误。

而不是总是在渲染后设置活动选项卡;

function onAfterRender() {
    ...

    var activeTab1 = Ext.getCmp('main-tabs').getActiveTab(),
        activeTab2 = activeTab1.getActiveTab();

    onTabChange(activeTab1, activeTab2);
}

如果没有令牌,可能会尝试设置它;

Ext.util.History.on('ready', function(history){
    if ( !history.getToken() ) {
        var activeTab1 = Ext.getCmp('main-tabs').getActiveTab(),
            activeTab2 = activeTab1.getActiveTab();

        onTabChange(activeTab1, activeTab2);
    }
}, this);
于 2013-04-04T15:29:23.633 回答