Javascript 如果DebugatalCosts为false,为什么在Dojo中加载自定义小部件会失败,如果为true,为什么加载会成功?
我有一个自定义dijit,当debugAtAllCosts=true时加载良好,但当debugAtAllCosts=false时加载失败,出现以下错误:Javascript 如果DebugatalCosts为false,为什么在Dojo中加载自定义小部件会失败,如果为true,为什么加载会成功?,javascript,dojo,Javascript,Dojo,我有一个自定义dijit,当debugAtAllCosts=true时加载良好,但当debugAtAllCosts=false时加载失败,出现以下错误: failed loading script/dojo15root/dojo/../../widget/DatePicker.js with error: TypeError: dojo.body() is undefined 我知道使用debugAtAllCosts=true使dojo使用XD加载程序,该加载程序异步加载模块。所以当人们
failed loading script/dojo15root/dojo/../../widget/DatePicker.js
with error: TypeError: dojo.body() is undefined
我知道使用debugAtAllCosts=true使dojo使用XD加载程序,该加载程序异步加载模块。所以当人们从同步加载程序转到异步加载程序时,通常会遇到问题。当小部件可以用异步加载程序加载,但不能用同步加载程序加载时,我应该寻找什么样的bug
我可以发布代码,但它由许多不同的js文件和其他小部件组成,这也可能是问题所在。所以在这一点上,我试图通过找出这个问题何时可能发生来缩小问题的范围
小部件无法加载时的My djConfig:
<script type="text/javascript">
var djConfig = {
parseOnLoad: true,
isDebug: true,
locale: 'en-us',
debugAtAllCosts:false,
modulePaths:{'widget':'../../widget','datepicker':'../../datepicker'}
};
</script>
小部件加载时的My djConfig:
<script type="text/javascript">
var djConfig = {
parseOnLoad: true,
isDebug: true,
locale: 'en-us',
debugAtAllCosts:false,
modulePaths:{'widget':'../../widget','datepicker':'../../datepicker'}
};
</script>
提前谢谢 在阅读了不同的加载程序策略之后,我认为我的问题必须是在加载文件之前在一些javascript代码中实例化dijit 事实证明,这里有一条令人不快的线:
dojo.provide("widget.DatePicker");
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
dojo.require("dijit.Dialog");
dojo.declare("widget.DatePicker", [dijit._Widget, dijit._Templated], {
...
//private fields
_dialogBox:new dijit.Dialog({
title: "Warning!"
}),
...
});
我通过将实例化移动到postCreate函数中来修复它,以确保小部件和所有需求都将被加载
我仍然不能100%确定为什么标准加载器会出现这个问题,因为据我所知,它是同步加载的;而XD加载程序是异步加载的。我的猜测是,在小部件生命周期中,小部件属性是在加载小部件的属性之前创建的。但这并不能解释为什么XD加载器会在这种情况下工作
如果有人能解释为什么XD加载器工作,当标准加载器在这种情况下失败时,我很乐意接受这个答案。否则,我会接受我的答案,因为它确实解决了问题