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) при добавлении модуля в ваше приложение.