我正在尝试使用Dojo工具包编写复杂的应用程序, 主屏幕包含:左主菜单,即Dojo手风琴,顶部条带和主页面,tabContainer在左侧菜单上每次点击都打开一个新标签,
我尝试在新标签内容中显示包含其他Dojo控件的外部页面,例如Grid(EnhancedGrid),Dojo表单控件等。
问题是Dojo控件不会在tabContainer下呈现Dojo控件
这里是每个左击打开一个新标签页(页面)的主要功能:
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功能):
<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>
答案 0 :(得分:0)
您没有在我的问题中提供足够的信息以便我随时运行测试或确定以下答案,但是根据您的编写内容我相信您的问题是未运行的Dojo解析器之一在您动态生成的窗格的内容上。虽然我无法从您提供的代码中看出,但是当首次加载页面时,Dojo解析器只运行一次是一种非常常见的配置,如果您没有做任何改变此行为的事情,那么可能是您的问题。
基本上,在加载内容窗格数据完成后,您将要执行以下操作:
parser.parse(dom.byId("main"));
(假设该内容窗格数据的根id
为main
,如上例所示,并且您已经需要parser
和{{ 1}}。)
请查看Dojo Parser documentation(您可能需要向下滚动到Parser API Notes以查看感兴趣的区域)才能看到如何执行此操作的示例。您可以在Dojo ContentPane documentation中查看更多信息,了解如何在内容窗格下载完成后锁定回调。
希望这有帮助。