Почему мой определенный вызов не запускается?
Я использую requireJS
и я пытаюсь определить модуль карт Google.
Я добавляю этот код в конец фрагмента HTML:
$(document).ready(function() {
console.log("ready");
define(['async!http://maps.google.com/maps/api/js?v=3&sensor=false'],
function (gmap) {
console.log(gmap);
});
});
"Готовая" консоль ведет запись, но define
звонок не запускается. Если я заменю его на require
вызов, файл загружается, но я gmap не определена.
Вопрос:
почему мой define
звонок не срабатывает?
1 ответ
Решение
Это потому, что как только модуль определен, он должен быть обязательным. Изменение вашего кода на что-то вроде этого будет работать:
// gmap.js (for example)
define(['async!http://maps.google.com/maps/api/js?v=3&sensor=false'], function(gmap) {
// Do some stuff
return gmap;
});
// main.js
require(['jquery', 'path/to/gmap'], function($, gmap) {
$(function() {
console.log(gmap);
});
});
Некоторые вещи на заметку:
- Модули, которые определены, должны жить в отдельных файлах. Прочтите эту страницу в документации API, чтобы понять, как они работают.
- Избегайте использования модулей внутри обратного вызова DOM ready, это означает, что вам придется ждать дольше, прежде чем модули могут быть запрошены. Лучше начать запрашивать их сразу и проверить готовность к DOM позже. RequireJS поставляется с DOM-готовым плагином только для этого.
- Убедитесь, что вы
require
jQuery как модуль (если вы не используете его как таковой). - Передача анонимной функции
$()
это ярлык для$(document).ready()