这是我的第一个道场建设,所以请原谅我对此事的无知。
我刚刚使用以下(非常简化的)配置文件从dojo构建系统创建了自定义构建:
dependencies = {
stripConsole: "normal",
layers: [
{
name: "../dijits/cx/dijitsCXbuild.js",
copyrightFile: "CopyrightCX.txt",
dependencies: [
"dojo.parser",
"dijit.dijit",
"dijit._Widget",
"dijit._Templated",
"dijit._Container",
"dojo.i18n",
"dojo.NodeList-fx",
"dojox.grid.cells",
"dojox.grid.DataGrid",
"dojox.layout.GridContainer",
"dijit.TitlePane",
"dijits.cx.TaskPanel",
"dijits.cx.Identify"
]
}
],
prefixes: [
[ "dijit", "../dijit" ],
[ "dojox", "../dojox" ],
[ "dijits.cx", "../dijits/cx" ]
]
}
......好吧,一切都很顺利,我得到了我要求的所有东西。然后在我的webapp中,我包含以下内容
<script type="text/javascript">
djConfig = {
isDebug:false,
parseOnLoad:true,
locale:getLocale()
};
</script>
<script type="text/javascript" src="Lib/cxdojo/dojo/dojo.js"></script>
<script type="text/javascript" src="Lib/cxdojo/dijits/cx/dijitsCXbuild.js"></script>
...看起来没问题,直到代码需要实例化第一个dijit并且它以臭名昭着的方式失败:“dijits.cx.TaskPanel不是构造函数。”
我可以通过包含“dojo.require()”来摆脱这个问题,但这是我通过创建自定义自己的构建我将摆脱的东西。关于我做错了什么或我该怎么做才能避免'dojo.require()'行的任何想法...... 谢谢你。
答案 0 :(得分:4)
您仍然需要文件中的dojo.require
。压缩的构建只会阻止dojo.require
对所有文件连接到一个文件并缩小它所需的文件的GET请求。这样可以节省页面加载的周期(我相信你现在已经看到了)。
如果你真的想摆脱许多dojo.require
(我不太疯狂,因为我喜欢看到页面中使用的内容),你可以这样做:
dojo.provide('my.main');
dojo.require('dijit.cx.TaskPane');
... all the other dojo.require statements ...
然后将其放在与dojo平行的目录中的文件中:
Lib/cxdojo/my/main.js
Lib/cxdojo/dojo/dojo.js
.. etc ...
然后将您的依赖项更改为:
dependencies: [
"my.main"
]
然后在您的文件中,您可以将其包含在脚本标记中:
<script type="text/javascript" src="Lib/cxdojo/my/main.js"></script>
然后,您只需要一个:
dojo.require('my.main');
此方法的另一个优点是,只需在将模块添加到应用程序时更改一个文件(/my/main.js)。