4

我正在与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 <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设置的事实,这会导致非常特殊的延迟重新加载效果,从而导致糟糕的用户体验。我想避免这个中间步骤。

4

2 回答 2

0

ContentPane 实际上不是 iframe,因此设置 window.location.href 会更改整个页面(dojo 应用程序)的 url,而不仅仅是 ContentPane。你有没有尝试过这样的事情:

cp2.set('href', 'http://www.google.com/')
于 2011-09-15T11:52:26.953 回答
0

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

/*
 * ...
 */

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事件(例如 by dojo.connect(cp2.controlButton, 'onClick', function() { /* ... */ });),而是覆盖它,否则ContentPane将首先调用 's 的内容。

请进一步注意,必须首先调用TabContainer'startup()函数以使controlButton对象可访问。

于 2011-09-18T18:28:21.877 回答