我正与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
标签,而是应该在同一窗口中跟随一个简单的链接(如{{1} }),离开包含js / dojo应用程序的页面。我还没有找到任何令人满意的解决方案,也没有匹配此要求的dojo小部件。什么是最好的方法?
作为一种令人不快的解决方法,我创建了一个覆盖<a href="http://www.google.com/">Link</a>
的重写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
,这导致了非常特殊的延迟重载效果,从而导致糟糕的用户体验。我想避免这个中间步骤。
答案 0 :(得分:0)
ContentPanes实际上不是iframe,因此设置window.location.href会改变整个页面(dojo app)的url而不仅仅是ContentPane。你尝试过这样的事情:
cp2.set('href', 'http://www.google.com/')
答案 1 :(得分:0)
满足上述要求的可能解决方法是覆盖onClick
ContentPane
的{{1}}事件:
controlButton
请注意,不要将另一个功能附加到/*
* ...
*/
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
的{{1}}函数才能访问TabContainer
对象。