Ответ 1
ОБНОВЛЕНИЕ:. Я развил совместимую с AMD базовую-tastypie под названием backbone-tastypie-amd.
В то время как решение sander будет работать, его немного раздражает, чтобы делать все вложенное требование, каждый раз, когда вы хотите, чтобы позвоночник.
backbone-tastypie - это так называемый "традиционный script". Вы можете решить проблему четырьмя способами.
-
Сделайте совместимость с базой-тастипией AMD. Вы можете сделать это одним из двух способов. Вариант 1 заключался бы в том, чтобы никогда не включать магистральную прямую - только базовую-тастипию. Затем измените базовую тастипию, чтобы гарантировать, что необходима магистраль.
var root = this; var Backbone = root.Backbone; if (!Backbone && (typeof require !== 'undefined')) Backbone = require('backbone').Backbone;
Однако это не очень приятно, потому что, по сути, он начнет загружать магистраль после того, как базовая-тастипа загрузится (синхронно). Он также не дает полного понимания того, как эти модули связаны, и это верно? Поэтому давайте обертываем основу-tastypie в define():
(function (factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(['backbone'], factory); } else { // RequireJS isn't being used. Assume backbone is loaded in <script> tags factory(Backbone); } }(function (Backbone) { //Backbone-tastypie contents }));
Это, безусловно, лучший вариант всего в этом ответе. RequireJS знает о зависимостях и может их разрешать, загружать и правильно оценивать. Стоит отметить, что Backbone сам загружает подчеркивание с использованием опции 1 и не определяет себя как модуль, что довольно плохо. Вы можете получить оптимизированную для AMD версию магистрального прямо здесь. Предположив, что вы используете эту версию AMD, теперь вы можете идти прямо вперед и требовать базового тастипа в ваше приложение (либо требуя его в функции define(), либо в действительной функции require()). Вам также не нужно включать опорную или нижнюю линию, поскольку эти зависимости разрешаются с помощью requirejs.
-
Используйте плагин order.js . Это заставляет вещи загружаться по порядку (по-прежнему асинхронно в некоторых отношениях, поскольку он загружает их всякий раз, но оценивает в правильном порядке)
require(["order!backbone.js", "order!backbone-tastypie.js"], function () { //Your code });
-
Поместите backbone.js в приоритетную конфигурацию. Это заставляет основную основу и ее зависимости всегда загружать, несмотря ни на что.
-
Добавьте backbone-tastypie в тот же файл, что и backbone.js. Каждый раз, когда базовая платформа загружается, так же, как и базовая тастипия. Hacky? Да. Но это очень похоже на рекомендуемый способ использования jquery с requireJS (jQuery-плагинам нужен jquery для загрузки - так же, как backbone-tastypie нуждается в позвоночнике загружаться).