Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将Dojo TabContainer行为更改为只打开外部链接而不显示ContentPane?_Javascript_Hyperlink_Dojo_Tabs_Tabcontainer - Fatal编程技术网

Javascript 如何将Dojo TabContainer行为更改为只打开外部链接而不显示ContentPane?

Javascript 如何将Dojo TabContainer行为更改为只打开外部链接而不显示ContentPane?,javascript,hyperlink,dojo,tabs,tabcontainer,Javascript,Hyperlink,Dojo,Tabs,Tabcontainer,我使用的是一个TabContainer,它有几个不同的ContentPane子项。它们中的每一个都配备了href参数,用于在选择选项卡时获取显示的外部AJAX内容: dojo.addOnLoad(function() { var tc_nav = new dijit.layout.TabContainer({ style: 'width: 98%;', doLayout: false }, 'tc_nav'); var cp1 = new

我使用的是一个
TabContainer
,它有几个不同的
ContentPane
子项。它们中的每一个都配备了
href
参数,用于在选择选项卡时获取显示的外部AJAX内容:

dojo.addOnLoad(function() {
    var tc_nav = new dijit.layout.TabContainer({
        style: 'width: 98%;',
        doLayout: false
    }, 'tc_nav');

    var cp1 = new dijit.layout.ContentPane({
        title: 'Test 1',
        href: 'ajax?test1',
        style: 'padding: 10px;',
        selected: true
    });

    dojo.connect(cp1, 'onShow', function() {
        cp1.refresh();
    });

    /*
     * ...
     */

    tc_nav.addChild(cp1);

    /*
     * ...
     */

    tc_nav.startup();
});
现在,我想在其他选项卡中集成一个在行为上应该有所不同的选项卡:与其将内容加载到
ContentPane
中,选项卡应该跟随同一窗口中的一个简单链接(如
),留下包含js/dojo应用程序的页面。我还没有找到任何令人满意的解决方案,也没有一个dojo小部件符合这个要求。最好的方法是什么

作为一种令人不快的解决方法,我创建了一个重写的
onShow
事件,触发了
window.location.href='…'

var cp2 = new dijit.layout.ContentPane({
    title: 'Test 2',
    style: 'padding: 10px;'
});

dojo.connect(cp2, 'onShow', function() {
    window.location.href = 'http://www.google.com/';
});

这种解决方法的一个恼人的缺点是,首先加载
ContentPane
,然后设置
window.location.href
,这会导致非常特殊的延迟重新加载效果,从而导致糟糕的用户体验。我希望避免这个中间步骤。

内容窗格实际上不是iFrame,因此设置window.location.href将更改整个页面(dojo应用程序)的url,而不仅仅是内容窗格。你有没有试过这样的方法:

cp2.set('href', 'http://www.google.com/')

满足上述要求的一种可能的解决方法是覆盖
ContentPane
controlButton
onClick
事件:

/*
 * ...
 */

var cp2 = new dijit.layout.ContentPane({
    title: 'Test 2',
    style: 'padding: 10px;'
});

/*
 * ...
 */

tc_nav.addChild(cp2);

/*
 * ...
 */

tc_nav.startup();

/*
 * ...
 */

cp2.controlButton.onClick = function() {
    window.location.href = 'http://www.google.com/';
};
请注意不要将另一个函数附加到
onClick
事件(例如,通过
dojo.connect(cp2.controlButton,'onClick',function(){/*…*/});
),而是覆盖它,否则将首先调用
ContentPane
的内容


请进一步注意,必须先调用
TabContainer
startup()
函数才能访问
controlButton
对象。

可能您误解了我的问题。实际上,我想更改整个页面的url。您建议的方法只是将的内容XHR加载到我的
ContentPane
中,并以框架形式呈现,这是
TabContainer
的常规行为。是的,我误解了。如何重新加载整个页面,但保留应用程序?我不想保留应用程序,我只想使用某些url参数重新加载整个页面。