Как загрузить пользовательские модули AMD при использовании Dojo через CDN?
Я использую Google CDN, а также пытаюсь загрузить свои собственные модули AMD с помощью своего загрузчика. Я знаю, что я делаю что-то неправильно, но я застрял. Любые идеи?
<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.7.0/dojo/dojo.js"
type="text/javascript" data-dojo-config="async:true,parseOnLoad:true"></script>
<script type="text/javascript">
require(["dojo/_base/kernel", "dojo/_base/loader", "dojo/parser"], function(dojo){
dojo.registerModulePath("pgGallery", "http://127.0.0.1:8080/js");
});
require(["pgGallery/Message"], function(m){
m.success("foo");
});
</script>
http://127.0.0.1:8080/js/Message.js - это расположение модуля.
Ответы
Ответ 1
Я понял, как это сделать: http://dojotoolkit.org/reference-guide/quickstart/cross-domain.html в разделе "Использование CDN с локальными модулями".
Пример со страницы:
<script type="text/javascript">
var dojoConfig = {
async: true,
packages: [
{
name: "my",
location: "/absolute/path/to/local/modules"
}
]
};
</script>
<!-- Bootstrap Dojo From Google CDN -->
<!-- removing the protocol from src url auto detects if current page is served via http or https and also loads the dojo resources from matching protocol -->
<script
type="text/javascript"
src="//ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojo/dojo.js">
</script>
<script type="text/javascript">
require(["my/FooModule"], function(FooModule){
// ...
});
</script>
Ответ 2
Другим вариантом, который должен работать, который я использую, является это. Обратите внимание на ".js". Как-то загрузчик рассматривает это по-другому.
require(["pgGallery/Message.js"], function(m){
m.success("foo");
});
Смотрите: http://dojotoolkit.org/reference-guide/1.8/loader/amd.html.
Если moduleId начинается с протокола (например, "http:" ) или "вперед-вниз" или заканчивается суффиксом ".js", предположим, что запрос предназначен для произвольного фрагмента JavaScript, а не для модуля.
То, что я не знаю, - это, если это лучшая практика или нет.