RequireJS испорчен примером? - PullRequest
0 голосов
/ 14 мая 2011

Просмотр RequireJS, но в отличие от Head.JS, который загружает в неопределенном порядке, но оценивает в определенном порядке, RequireJS кажется другим

Обычно RequireJS загружает и оценивает сценариев в неопределенном порядке.

Тогда это показывает, как префикс заказа! к именам скриптов для явного упорядочения и т.д ..

Тогда в примерах:

require(["jquery", "jquery.alpha", "jquery.beta"], function($) {
    //the jquery.alpha.js and jquery.beta.js plugins have been loaded.
    $(function() {
        $('body').alpha().beta();
    });
});

Так что, если jquery.alpha загружается и оценивается до jquery, то наверняка это вызовет проблему? Забыть любое использование клиентского кода, например, тело функции выше, если, как и большинство плагинов, которые они прикрепляют к jQuery.fn, то на этапе оценки jQuery в этом сценарии будет неопределенным.

Что мне здесь не хватает?

Ответы [ 3 ]

18 голосов
/ 26 июня 2011

RequireJS предназначен не для загрузки простого javascript, а для загрузки определенных модулей. Формат модуля выглядит примерно так:

define(['a', 'b'], function(a, b) {
    return { zzz: 123 };
});

Важно отметить, что весь код модуля находится внутри анонимной функции. Поэтому, если файл запускается в произвольном порядке, это не имеет значения, потому что все, что он делает - это регистрирует модуль. Затем код модуля выполняется в порядке зависимости, а возвращаемое значение становится модульным объектом , который передается в качестве параметра в код, использующий модуль.

Если вы пытаетесь загрузить простые файлы, это не будет работать для вас правильно. В этом случае есть плагин order для принудительной загрузки.

1 голос
/ 23 сентября 2011

Следует отметить, что в этом примере используется заказная версия "requirejs and jquery", упакованная вместе, что, как я считаю, означает, что jquery всегда будет доступен первым.

Если у вас есть проблемы, вы всегда можете заключить свои плагины в определение модуля и убедиться, что они зависят от самого jquery, снова убедившись, что порядок правильный:

/* SPECIAL WRAPPING CODE START */
define(['jquery'], function(jQuery) {


// .... plugin code ....


/* SPECIAL WRAPPING CODE END */
});
0 голосов
/ 20 мая 2011

Вы правы, без чего-либо помогающего в порядке исключения.Хорошей новостью является то, что RequireJS имеет плагин Order, чтобы помочь в этом.

В настоящее время я оцениваю RequireJS ...

А вот пример одного из моих файлов: Приказ!'Команда загрузит файлы для вас последовательно.Вы можете (затем) использовать функцию обратного вызова для загрузки других (вспомогательных) файлов.

<script src="Loaders/RequireJS/requireJS.js" type="text/javascript"></script>
<script src="Loaders/RequireJS/order.js" type="text/javascript"></script>
<script type="text/javascript">

    require(["Loaders/RequireJS/order!././Includes/JavaScript/jQuery/Core/jquery-1.3.2.js",
        "Loaders/RequireJS/order!././Includes/JavaScript/jQuery/Core/jquery.tools.min.js",
        "Loaders/RequireJS/order!././Includes/JavaScript/jQuery/ThirdPartyPlugIns/jquery.tmpl.js"], function() {

        require(["././Includes/JavaScript/jQuery/jGeneral.js",
            "././Includes/JavaScript/jQuery/autocomplete.js",
            "././Includes/JavaScript/jQuery/jquery.ErrorWindow.js",
            "././Includes/JavaScript/jQuery/jquery.ValidationBubble.js",
            "././Includes/JavaScript/jQuery/jquery.Tootltip.js",
            "././Includes/JavaScript/jQuery/jquery.Extensions.js",
            "././Includes/JavaScript/jQuery/jquery.Toaster.js"], null);

        require(["././Includes/JavaScript/jQuery/ThirdPartyPlugIns/jquery.dimensions.js",
            "././Includes/JavaScript/jQuery/ThirdPartyPlugIns/jQuery.Color.Animations.js",
            "././Includes/JavaScript/jQuery/ThirdPartyPlugIns/jquery.corners.min.js",
            "././Includes/JavaScript/jQuery/ThirdPartyPlugIns/jquery.tipsy.js",
            "././Includes/JavaScript/jQuery/ThirdPartyPlugIns/jquery.numberformatter-1.1.0.js",
            "././Includes/JavaScript/jQuery/ThirdPartyPlugIns/jquery.tipsy.js"], null);
    });
</script>

При Честности: Я смотрю на различные асинхронные загрузчики ресурсов , и мне трудно найти тот, который делает все, что мне нужно.Я также нахожу документацию по каждому из них.

...