我正在尝试使用dojo.NodeList.instantiate
方法来渲染dijits,该方法接受现有的HTML元素,并在DOM加载时将其转换为dijit。
可以找到instantiate
方法的API参考here。
以下示例调用instantiate
方法中的dojo.addOnLoad
方法,应创建一个BorderContainer
个实例,其中包含两个ContentPane
个实例,但DIV会在开始时保留,不要成为dijits:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Dijit Test</title>
<style type="text/css">
@import "dojoroot/dijit/themes/tundra/tundra.css";
@import "dojoroot/dojo/resources/dojo.css";
</style>
<script type="text/javascript" src="dojoroot/dojo/dojo.js"
djConfig="parseOnLoad: true"></script>
<script type="text/javascript">
dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.layout.ContentPane");
dojo.addOnLoad(
function() {
dojo.query("#divOuter").instantiate(
dijit.layout.BorderContainer, {
design : 'sidebar',
gutters : false
}
);
dojo.query("#divMiddle").instantiate(
dijit.layout.ContentPane, {
region : 'center'
}
);
dojo.query("#divRight").instantiate(
dijit.layout.ContentPane, {
region : 'right',
splitter : true
}
);
}
);
</script>
</head>
<body>
<div id="divOuter" style="width:400px;height:300px">
<div id="divMiddle">Middle box</div>
<div id="divRight">Right box</div>
</div>
</body>
</html>
我在Firefox 3.5和Internet Explorer 7中都尝试了上述代码,但都无法渲染dijits。如果我在属性对象中指定标准HTML属性(例如style
属性),则此样式更改将正确显示,表示正在读取对象:
// The red border appears when using this example
dojo.query("#divRight").instantiate(
dijit.layout.ContentPane, {
region : 'right',
splitter : true,
style : 'border:1px solid red'
}
);
以下HTML(使用dojoType
和其他属性属性)可以正常工作 - BorderContainer和ContentPanes在两个浏览器中都能正确显示:
<div dojoType="dijit.layout.BorderContainer" design="sidebar" gutters="false"
style="width:400px;height:300px">
<div dojoType="dijit.layout.ContentPane" region="center">Middle box</div>
<div dojoType="dijit.layout.ContentPane" region="right" splitter="true"
style="width:200px;">Right box</div>
</div>
请问有人可以告诉我为什么instantiate
示例不起作用吗?
我已经做了很多搜索,但似乎无法找到其他人遇到此问题,这可能意味着我没有正确使用instantiate
方法!
感谢。
答案 0 :(得分:2)
在实例化后,您需要在这些dijit上调用startup。 dojo.query.instantiate
不会为你做,因为它只是创建对象。
在onLoad功能的底部,添加以下内容:
dijit.byId('divOuter').startup();
dijit.byId('divMiddle').startup();
dijit.byId('divRight').startup();