4

这是我的第一个道场构建,所以请原谅我对这件事的无知。

我刚刚使用以下(非常简化的)配置文件从 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" ]
]

}

...好吧,一切都很好,我得到了我自己的包裹,里面有我所要求的一切。然后在我的网络应用程序中,我包含以下内容

<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()'行的任何想法......谢谢堆。

4

1 回答 1

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)。

于 2009-09-09T16:24:29.977 回答