【问题标题】:RequireJs - feeding values from one dependency as parameter for another dependencyRequireJs - 将来自一个依赖项的值作为另一个依赖项的参数提供
【发布时间】:2012-12-05 08:55:32
【问题描述】:

我们已将 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() 的双重嵌套,但无济于事。如何编写依赖链来达到预期的效果?

【问题讨论】:

  • 我也需要这个!有什么进展吗?
  • 所以你正在寻找类似 define([config], function(config) { require([GOOGLEMAPS + config.APIKEY], function() {}); });?有更详细的代码示例吗?
  • 嘿,克里斯,上面的例子正是问题所在。

标签: requirejs js-amd


【解决方案1】:

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

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();
    });

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多