Как правило, вы должны обернуть свои модули в define()
или добавить define()
в конце файла, если эти модули не имеют зависимостей. Кажется, однако, что все эти модули зависят от jQuery, если не от других модулей / файлов.
Поскольку вы не используете стандартный протокол AMD require()
/ define()
, AMD на самом деле не помогает вам с этими модулями. Если вы не планируете писать свои собственные модули с использованием define()
, то вы можете использовать практически любой асинхронный загрузчик.
Тем не менее, есть способ заставить curl.js работать с не-AMD модулями / файлами. Используйте JS! плагин. Вот ваш первый блок файлов, переведенных для использования js! Плагин (заметьте, я также добавил обратно ".js" ext, который мне нравится делать с немодулями):
// we load the core files first, then get the next block that depends on them
curl([
"js!MooTools/Core/mootools-1.2.2-core-jm.js",
"js!jQuery/Core/jquery-1.3.2.js"
]).next([
"js!MooTools/mGeneral.js",
"js!jQuery/Core/jquery.tools.min.js",
"js!jQuery/ThirdPartyPlugIns/jquery.tmpl.js"
]).then(onSuccess, onError);
Если любой из этих файлов в каждом массиве зависит друг от друга, вы также можете использовать суффикс! Order для них, чтобы они ожидали других файлов перед выполнением / оценкой (хотя убедитесь, что вы устанавливаете правильные заголовки кэша) , На самом деле суффикс! Order - это самый быстрый метод, если нет проблем с кэшированием (мобильные браузеры добавляют некоторые дополнительные ограничения на размер файла).
Были ли другие сообщения об ошибках? В частности, я ожидаю, что curl.js выдаст хотя бы одну ошибку, кроме просто «Обещание не выполнено».
Также, пожалуйста, проверьте вкладку Net (Firebug) или вкладку Network (Chrome), чтобы убедиться, что curl.js ищет правильное местоположение для модулей.
FWIW, я планирую удалить псевдоним require
-> curl
. Причина в том, что глобальная функция require
не является стандартной (и явно не стандартизирована в предложении AMD). Я предлагаю вам использовать curl()
вместо require()
.
curl.js также позволяет явно указывать псевдоним API верхнего уровня через параметр конфигурации «apiName», если вы действительно хотите использовать имя «require». :)
<script>curl = { apiName: "require" }; </script>
<script src="path/to/curl.js"></script>
<script>require(["some/modules"]).then(success, failure);</script>
Больше FWIW: стандарт require
обычно требуется только в модуле и может быть запрошен путем включения его в качестве зависимости:
define(["require"], function (require) {
require(["another/module"], function (another) {
// use another module here
});
});
- Джон