我正在使用具有几个不同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中,该选项卡应该在同一窗口中跟随一个简单的链接(例如<a href="http://www.google.com/">Link</a>),而使页面包含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,这导致了非常奇特的惰性重新加载效果,并因此带来了不良的用户体验。我想避免这个中间步骤。

最佳答案

ContentPanes实际上不是iframe,因此设置window.location.href不仅会更改ContentPane,还会更改整个页面(dojo应用)的网址。您是否尝试过以下方法:

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

09-25 17:16
查看更多