Почему мой определенный вызов не запускается?

Я использую 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()
Другие вопросы по тегам