Мне не хватило места в комментариях и я хотел добавить код, поэтому я делаю второй ответ:
То, что выложил @timDunham, по большей части довольно хорошо, хотя у меня есть несколько дополнений, которые кто-то мог бывключите для дальнейшего понимания.
В коде:
define([
'jquery'
'libraries/backbone'
]
Я считаю, что Underscore отсутствует.Во-первых, для работы Backbone необходим Underscore, и без него, я думаю, он сломался бы.Во-вторых, если вы не используете AMDJS форка Underscore и Backbone, они не поддерживают AMD.Подчеркните УДАЛЕННУЮ поддержку AMD с v1.3.0.Если мы предположим, что мы используем подчеркивание и основу не-AMD, они, вероятно, не принадлежат к define[]
и должны быть require[]
.
Таким образом, правильное определение будет выглядеть примерно так, ЕСЛИ выправильно используете версии AMDJS:
define([
'jquery',
'underscore',
'Backbone'
], function($, _, Backbone) { ... });
Это предполагает, что я создал пути в конфигурации config:
require.config({
paths : {
jquery : 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min',
underscore : '../../libs/js/underscore/underscore.min',
Backbone : '../../libs/js/backbone/backbone',
}
});
Я видел некоторые реализации, которые не используют AMDJSверсии и дело в том, что, поскольку они не являются асинхронными модулями, вы должны убедиться, что они загружены в правильном порядке.
Я считаю, что это НЕ гарантирует правильный порядок загрузки зависимостей:
require({
baseUrl: '/'
},[
'jquery',
'app/views/movieRow',
'app/models/movie',
'libraries/backbone'
],
Поскольку что-то указано в качестве зависимости, это не значит, что оно будет загружаться при необходимости.С асинхронными модулями это не проблема, но в этом примере я не упомянул об этом, поэтому предположим, что они не AMD.Этот модуль ЗАВИСИТ от jquery, movieRow, movie и backbone.Но если backbone пытается загрузить до jquery ... (x_x) Почему мир, почему?
Именно поэтому я считаю, что require.js имеет плагин под названием order!в помощь.С заказом!Вы можете установить свои зависимости, и он загружает скрипты в ... ну ... порядке.Примерно так:
require({
baseUrl: '/'
},[
'order!jquery',
'app/views/movieRow',
'app/models/movie',
'order!libraries/underscore', // <- Don't forget me!
'order!libraries/backbone'
]
Я полагаю, что с этим ваш модуль будет оценивать и гарантировать, что сначала будет загружен jquery, затем подчеркнут, а затем будет магистраль.Нет гарантий для фильма или фильма, хотя в этом случае, кого это волнует?: -)
Я использую вилки AMDJS-Backbone и AMDJS-Underscore для своего проекта, поэтому я обычно помещаю их в define[]
, и он работает без помех.RequireJS действительно великолепен и значительно очистил мой код.Куда бы я ни пошёл, JRBurke, везде появляется писатель RequireJS, и он всегда очень полезен своими комментариями ко всему, что касается require.js.И я имею в виду все.Моя теория заключается в том, что он телепатически связан с Require, и каждый раз, когда в сети появляется новый экземпляр requirejs, он получает немедленный доступ к этим знаниям.Могу поспорить, что если эта дискуссия продолжится, он появится здесь, чтобы также поздороваться.
Мой отказ от ответственности в том, что я также новичок в Require, и я могу неправильно понимать вещи.Но из того, что я знаю, я думал, что эти дополнительные указатели и информация могут помочь людям составить лучший код, используя require.
Ссылки: