4

DOJO TabContainer には、タブを変更するときにトリガーされるイベントがありますか?

そうだと思いますが、ドキュメントでそれについて何も見つけることができませんでした。:(

解決済み: ここで解決策を見つけたようです:

Dijit TabContainer イベント - onFocus

最も検索されやすいトピックのタイトルではない:/

4

4 に答える 4

7

aspect.afterTabContainer のselectChildメソッドに接続します。

var tabContainer1 = registry.byId("tabContainer1");

aspect.after(tabContainer1, "selectChild", function() {
    console.log("tab changed");        
});

または、特定のタブに興味がある場合は、その ContentPane に接続します_onShow

var contentPane1 = registry.byId("contentPane1");

aspect.after(contentPane1, "_onShow", function() {
    console.log("[first] tab selected");        
});

jsFiddle で実際の動作を確認してください: http://jsfiddle.net/phusick/Mdh4w/

于 2012-05-11T10:04:48.957 に答える
7

ドキュメントから;

var tabs = registry.byId('someTabs');
tabs.watch("selectedChildWidget", function(name, oval, nval){
    console.log("selected child changed from ", oval, " to ", nval);
});
于 2013-06-06T06:14:45.653 に答える
3

正しい@phusickの回答に加えて、サブスクライブできるトピックStackContainerの公開を含むすべてのs .TabContainer

http://dojotoolkit.org/reference-guide/1.7/dijit/layout/StackContainer.html#published-topics

[widgetId]-addChild,
[widgetId]-removeChild
[widgetId]-selectChild

http://dojotoolkit.org/reference-guide/1.7/dojo/subscribe.html#dojo-subscribe

于 2012-05-11T10:14:44.643 に答える
0

これは、Dojo 1.8 で動作する完全なコード サンプルです。テスト済みです。タブを変更するだけで発生するイベントではありません。API でイベントを発生させることはできませんでしたが、少なくとも Click イベントでは機能します。

require(["dijit/registry",  "dojo/on", "dojo/ready", "dojo/domReady!"], function (registry, on, ready) {
    ready(function () { //wait till dom is parsed into dijits
        var panel = registry.byId('mainTab');   //get dijit from its source dom element
        on(panel, "Click", function (event) {   //for some reason onClick event doesn't work 
            $('.hidden_field_id').val(panel.selectedChildWidget.id);  //on click, save the selected child to a hidden field somewhere. this $ is jquery, just change it to 'dojo.query()'
        });
    });
});

//include this function if you want to reselect the tab on page load after a postback
require(["dijit/registry", "dojo/ready", "dojo/domReady!"], function (registry, ready) {
    ready(function () {
        var tabId = $('.hidden_field_id').val();
        if (tabId == null || tabId == "")
            return;
        var panel = registry.byId('mainTab');
        var tab = registry.byId(tabId);
        panel.selectChild(tab);
    });
});
于 2013-02-21T07:35:23.407 に答える