4

我们已将 Google Maps API 包装为 RequireJs 中的异步模块。

define(['async!http://maps.googleapis.com/maps/api/js?libraries=places&key=APIKEY&sensor=true'],

function(){
    var maps = window.google.maps;

    return maps;
});

现在我们希望将 API 密钥提取到 config.js 文件中,以存储不同环境的配置设置。但这不可能起作用(因为尚未定义变量名)

define([config,
'async!http://maps.googleapis.com/maps/api/js?libraries=places&key' + config.APIKEY + '&sensor=true'],

我尝试了 define() 和 require() 的一些双重嵌套,但无济于事。如何编写依赖链来达到预期的效果?

4

1 回答 1

0

我现在能想到的唯一方法是回调。就像是:

define([], function() {
    var exports = {};

    exports.Maps = function (maps) {
        this.hello = function () {
            console.log(maps);
        };
    };

    exports.Factory = function (apiKey) {
        this.manufacture = function (loadedCallback) {
            require(['http://maps.googleapis.com/maps/api/js?libraries=places&key=' + apiKey + '&sensor=true'], function () {
                loadedCallback(new exports.Maps(window.google.maps));
            });
        };
    };

    return exports;
});

然后使用它你会做:

require(["foo"], function (Foo) {

    var apiKey = "blablabla",
        factory = new Foo.Factory(apiKey);
    factory.manufacture(function (Maps) {
        Maps.hello();
    });

});
于 2013-10-23T10:13:47.657 回答