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参数重新加载整个页面。