Dojo build -> dojo.require(); все еще нужно?

Это была моя первая сборка додзё, прошу прощения за мое невежество в этом вопросе.

Я только что создал свою собственную сборку из системы сборки 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()... спасибо, куча.

1 ответ

Решение

Вам все еще нужно 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:

 <script type="text/javascript" src="Lib/cxdojo/my/main.js"></script>

Тогда вам нужно только одно требование:

  dojo.require('my.main');

Еще одним преимуществом этого подхода является то, что вам нужно изменить только один файл (/my/main.js) при добавлении модуля в ваше приложение.

Другие вопросы по тегам