Как мне добиться отложенной загрузки через CDN и использовать динамические параметры запросов в requireJS? - PullRequest
1 голос
/ 31 декабря 2011

Я потратил слишком много времени на эту проблему. Я поражен, что это так трудно достичь.

РАБОТЫ

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 перед ее выполнением.

...