首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dojo tabContainer不能正确显示Dojo控件

Dojo tabContainer不能正确显示Dojo控件
EN

Stack Overflow用户
提问于 2012-01-04 12:40:00
回答 1查看 730关注 0票数 1

我正在尝试使用Dojo工具包编写一个复杂的应用程序,主屏幕包含:左侧主菜单是Dojo accordion,顶部条和主页是tabContainer,每次点击左侧菜单都会打开一个新的选项卡。

我尝试在新的选项卡内容中显示一个外部页面,其中包含其他Dojo控件,如网格(EnhancedGrid)、Dojo表单控件等。

问题是Dojo控件不会在tabContainer下呈现Dojo控件

这里的main函数每次点击左键都会打开一个新的选项卡(页面):

代码语言:javascript
复制
dojo.addOnLoad(function() {
    var opened = {};
    dojo.forEach(dojo.query("#leftAccordion a"), function(aTag) {
        dojo.connect(aTag, 'onclick', null, function(e) {
            dojo.stopEvent(e);
            var tabs = dijit.byId("topTabs");
            var pane = opened[aTag.href];
            if (!pane)
            {  
                pane = new dijit.layout.ContentPane({
                    title: aTag.title,
                    closable: true,
                    href: aTag.href, 
                    onClose: function() {
                        opened[aTag.href] = null;
                        return true;
                    }
                });
                opened[aTag.href] = pane; 
                tabs.addChild(pane);
            }
            tabs.selectChild(pane);
        });
    });
});

下面是HTML (包含Dojo特性):

代码语言:javascript
复制
<div id="main" data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="liveSplitters:false, design:'sidebar'">
        <div id="header" data-dojo-type="dijit.MenuBar" data-dojo-props="region:'top'">
            <div data-dojo-type="dijit.MenuBarItem"  data-dojo-props="iconClass:'dijitIconDelete'" data-dojo-props="onclick: function(){ alert('no submenu, just a clickable MenuItem'); }">
                שולחן עבודה
            </div>
            <div data-dojo-type="dijit.MenuBarItem" data-dojo-props="onclick: function(){ alert('no submenu, just a clickable MenuItem'); }">
                משימות
            </div>

                        <div data-dojo-type="dijit.MenuBarItem" data-dojo-props="onclick: function(){ alert('no submenu, just a clickable MenuItem'); }">
                התנתק
            </div>
        </div>

        <div data-dojo-type="dijit.layout.AccordionContainer" data-dojo-props="region:'leading', splitter:true, minSize:20, minSize: 100, maxSize:300" style="width: 200px;" id="leftAccordion">
            <?php
            $opened = FALSE;
            foreach($menues as $menu)
            {
                if ($opened == TRUE && $menu->parent == 0)
                {
                    print '</ul>' . "\n";
                    print '</div>' . "\n";
                    $opened = FALSE;
                }

                if ($opened == FALSE && $menu->parent == 0)
                {
                    print "<div data-dojo-type=\"dijit.layout.ContentPane\" data-dojo-props=\"title:'$menu->title'\">" . "\n";
                    print ' <ul>' . "\n";
                    $opened = TRUE;
                }
                else{
                    $url = $this->config->slash_item('index_url') . $menu->url;
                    print "     <li><a href=\"$url\" title=\"$menu->title\">$menu->title</a></li>" . "\n";
                }
            }
            if ($opened == TRUE)
            {
                print ' </ul>' . "\n";
                print '</div>' . "\n";
            }
            ?>

        </div><!-- end AccordionContainer -->

        <!-- top tabs (marked as "center" to take up the main part of the BorderContainer) -->
        <div data-dojo-type="dijit.layout.TabContainer" data-dojo-props="region:'center', tabStrip:true" id="topTabs">

            <div id="basicFormTab" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="title:'Basic Form Widgets', style:'padding:10px;display:none;'">

            </div>
        </div><!-- end of region="center" TabContainer -->
    </div> 
EN

回答 1

Stack Overflow用户

发布于 2016-07-12 22:56:01

您没有在您的问题中提供足够的信息,使我无法轻松运行测试或确定下面的答案,但是从您编写的内容来看,我非常确信您的问题是Dojo解析器没有在您动态生成的窗格的内容上运行。虽然我不能从您提供的代码中看出,但Dojo解析器在第一次加载页面时只运行一次,这是一个非常常见的配置,如果您没有采取任何措施来更改此行为,这可能是您的问题。

基本上,在完成内容窗格数据的加载后,您将希望执行以下操作:

代码语言:javascript
复制
parser.parse(dom.byId("main"));

(假设内容窗格数据的根目录的idmain,就像上面的示例一样,并且您已经需要了parserdom。)

请查看Dojo Parser documentation (您可能需要向下滚动到Parser API Notes才能查看感兴趣的区域),以查看如何执行此操作的示例。您可以进一步查看Dojo ContentPane documentation,以了解在内容窗格完成下载时如何锁定回调。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8722071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档