当我使用dojoConfig
设置async: true
时,我的DateTextBox
无法渲染,但
当我使用async: false
时一切正常;但我需要async
模式才能使用AJAX长时间轮询。如何解决此问题,以便呈现我的控件?
这是我的代码:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="dijit/themes/claro/claro.css">
<style>
html, body {
height: 100%;
margin: 0;
overflow: hidden;
padding: 0;
}
</style>
<script>dojoConfig = {async: true}</script>
<script src='dojo/dojo.js'>
</script>
<script>
require(["dojo/ready", "dijit/form/Button", "dojo/dom", "dijit/registry"], function(ready, Button, dom, registry){
ready(function(){
// Create a button programmatically:
var myButton = new Button({
label: "button"
}, "topButton");
});
});
require(["dojo/ready", "dijit/form/Button", "dojo/dom"], function(ready, Button, dom){
ready(function(){
// Create a button programmatically:
var myButton = new Button({
label: "button"
}, "leftButton");
});
});
require(["dojo/ready", "dijit/form/DateTextBox", "dojo/dom", "dojo/parser"], function(ready, DateTextBox, dom, parser){
ready(function(){
// Create a button programmatically:
var dateTextBox = new DateTextBox({
value: new Date(2009, 0, 20)
}, "centerPicker");
});
});
require(["dojo/ready", "dijit/form/Button", "dojo/dom"], function(ready, Button, dom){
ready(function(){
// Create a button programmatically:
var myButton = new Button({
label: "button"
}, "bottomButton");
});
});
require(["dojo/ready", "dijit/registry", "dijit/layout/BorderContainer", "dijit/layout/ContentPane"],
function(ready, registry, BorderContainer, ContentPane){
ready(function(){
var appLayout = new BorderContainer({
design: "headline"
}, "appLayout");
appLayout.addChild(
new ContentPane({
region: "top",
content: registry.byId("topButton")
})
);
appLayout.addChild(
new ContentPane({
region: "left",
content: registry.byId("leftButton")
})
);
appLayout.addChild(
new ContentPane({
region: "center",
content: registry.byId("centerPicker")
})
);
appLayout.addChild(
new ContentPane({
region: "bottom",
content: registry.byId("bottomButton")
})
);
// start up and do layout
appLayout.startup();
});
});
</script>
</head>
<body class="claro">
<style>
html, body {
height: 100%;
margin: 0;
overflow: hidden;
padding: 0;
}
#appLayout {
height: 100%;
}
</style>
<div id="appLayout" class="demoLayout"></div>
<button id="topButton" type="button"></button>
<button id="leftButton" type="button"></button>
<div id="centerPicker"></div>
<button id="bottomButton" type="button"></button>
</body>
</html>
答案 0 :(得分:1)
如果您构建了一个依赖层,那么这个问题就会消亡。问题是,DateTextBox具有更多的依赖关系,然后是BorderContainer - 因此inputelement的require
完成后续下载,然后是布局中的require
..
这反过来使dojo.ready以“错误”的方式排列回调,而不是你所希望的那样。一旦所有依赖项都被下载,.ready就会有一个要调用的函数列表 - 但它是按照脚本排队的方式排序的。
为了克服这个问题,你可以使用'互斥',因为在某些奇怪的情况下 - 的订单可以在设计需要时排队。你必须使逻辑类似于:
if registry.byId(centerPicker) != undefined: centerRegionContentPane.addChild(registry.byId(centerPicker))
。If registry.byId(centerRegion) != undefined: registry.byId(centerRegion).addChild(centerPickerWidget)
在datebox部分下。