如何捕获我的dojo TabContainer的子/嵌套(子)选项卡的`id`?

时间:2015-02-25 20:55:23

标签: javascript dojo dijit.layout

我有一组带有子标签的标签。单击时,我需要获取每个选项卡的id。我首先在watch dojo对象中找到了TabContainer函数:

myTabContainer.watch("selectedChildWidget", function(name, oval, nval){
    console.log("selected child changed from ", oval, " to ", nval);
});

这适用于父标签,但不适用于子/嵌套子标签。我唯一的线索是子选项卡是ContentPane个对象,而不是TabContainer个对象。

我也尝试了这个,它也适用于父标签:

var tcmainid = tcmain.id;
dojo.connect(dijit.byId(tcmainid), "selectChild", function(page){console.log("Page ID: " + page.id)});

这是我的标签创建代码:

var tcmain = new TabContainer({doLayout: false}, 'htmlDDIVid');

var parentTab1 = new ContentPane({title: "Tab1", content: gridx1});
var parentTab2 = new TabContainer({title: "Tab2", doLayout: false, nested: true});

var parentTab2SubTab1 = new ContentPane({title: "SubTab1", content: sub1Gridx});
var parentTab2SubTab2 = new ContentPane({title: "SubTab2", content: sub2Gridx});

parentTab2.addChild(parentTab2SubTab1);
parentTab2.addChild(parentTab2SubTab2);

tcmain.addChild(parentTab1);
tcmain.addChild(parentTab2);

如何为我的孩子/嵌套子标签获取id

1 个答案:

答案 0 :(得分:0)

我明白了。我尝试了几种不同的方法,但只有这一种方法适用于子标签。这是我的解决方案:

使用:

"dijit/registry",
"dojo/on",

在我的道场require声明中。

myGridxIDTabContainer ID,它存在于我的HTML页面的DIV中,其中绘制了我的TabContainer,其中包含我的所有标签和子标签,每个标签标签都有{{1} }。

gridx

我遇到的问题是,为gridx中的当前标签选择了点击次数。我用if语句绕过了这个:

// Pickup the onClick and get the ID of the tab or sub tab being clicked, this is used in the case switch statement for updating the grid accordingly
    var tabContainerPanel = registry.byId('myGridxID');   //get dijit from its source dom element

    on(tabContainerPanel, "Click", function (event) {
        selectedTabString = tabContainerPanel.selectedChildWidget.title;

        if (typeof tabContainerPanel.selectedChildWidget.selectedChildWidget !== 'undefined'){
            // There are no child tabs, parent tab only
            selectedTabString = tabContainerPanel.selectedChildWidget.selectedChildWidget.title;
        }

检查并查看我点击的当前if (selectedTabString !== prevSelectedTabString){ 是否与我刚刚选择的那个相同,然后它忽略了点击,或者我应该忽略单击选项卡时的代码。在我的代码中单击选项卡时,我将其更新为Gridx选项卡。