Я потратил слишком много времени на эту проблему. Я поражен, что это так трудно достичь.
РАБОТЫ
define('mapAPI',
['googleLoader'],
function (G) {
// Google is good to go
}
);
define('googleLoader',
['async!http://maps.googleapis.com/maps/api/js?sensor=true'],
function(){
return window.google.maps;
}
);
НЕ РАБОТАЕТ
define('mapAPI',
['require'],
function (require) {
(function () {
require('googleLoader')
}());
}
);
define('googleLoader',
['async!http://maps.googleapis.com/maps/api/js?sensor=true'],
function(){
return window.google.maps;
}
);
Ошибка: имя модуля googleLoader еще не загружено для контекста: _
http://requirejs.org/docs/errors.html#notloaded
ТАКЖЕ НЕ РАБОТАЕТ
define('mapAPI',
['googleLoader'],
function (G) {
// Google is good to go
}
);
define(
['require'],
function (require){
require(['async!http://maps.googleapis.com/maps/api/js?sensor=true']);
return window.google.maps; //undefined
}
);
"Ошибка сети: 404 НЕ НАЙДЕНО - http://localhost:8000/public/example/async.js"
Если плагин async не используется, модуль и зависимый модуль продолжат работу до загрузки скрипта.
ЕЩЕ, НЕ РАБОТАЕТ
define('googleLoader',
[],
function () {
var script = document.createElement("script");
script.src = 'http://maps.googleapis.com/maps/api/js?sensor=true&callback=gCB';
script.type = "text/javascript";
document.getElementsByTagName("head")[0].appendChild(script);
return (function load() {
if (window.google) {
var G = window.google;
return G;
}
else {
setTimeout(load, 50);
}
}());
}
);
В этом случае, как если бы оператор return не ждал разрешения функции anon перед ее выполнением.