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 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

ContentPanes は実際には iframe ではないため、window.location.href を設定すると、ContentPane だけでなくページ全体 (Dojo アプリ) の URL が変更されます。次のようなことを試しましたか:

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

上記の要件を満たすために考えられる回避策は、 のイベントをオーバーライドすること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イベントに別の関数を (たとえば によって) 添付しないでくださいdojo.connect(cp2.controlButton, 'onClick', function() { /* ... */ });。オーバーライドする必要があります。そうしないと、ContentPaneのコンテンツが最初に呼び出されます。

オブジェクトにアクセスできるようにするには、最初にTabContainerstartup()関数を呼び出す必要があることに注意してください。controlButton

于 2011-09-18T18:28:21.877 に答える