如何使用RequireJS加载Google Maps API?

hju*_*ter 45 google-maps-api-3 requirejs js-amd

我正在努力用requireJS加载gmaps api.这就是我尝试过的:

requirejs.config({
    urlArgs: "noCache=" + (new Date).getTime(),
    paths : {
        "jquery": "vendor/jquery-1.8.2.min",
        "bootstrap": "vendor/bootstrap.min",      
        "underscore": "libs/underscore-min",
        "backbone": "libs/backbone-min",    
        "template": "libs/template",
        "gmaps": "http://maps.google.com/maps/api/js?v=3&sensor=false"
    },
    shim: {
        'backbone': {
            deps: ['jquery', 'underscore'],
            exports: 'Backbone'
        },
        'underscore': {
            exports: '_'
        },
        'bootstrap': {
            deps: ['jquery']
        },
        'gmaps': {
            deps: ['jquery']
        },
        'main':{
            deps: ['jquery','gmaps']   
        }
    }
});

require(["main"], function (main) {})
Run Code Online (Sandbox Code Playgroud)

但是当我尝试实例化我得到的地理编码器时,在main.js里面,undefined不是函数"错误.

var geocoder = new google.maps.Geocoder();
Run Code Online (Sandbox Code Playgroud)

任何想法我可能做错了什么?

hju*_*ter 64

我已经设法使用异步插件对其进行排序.

一个简单的例子是:

require.config({
    paths: {
        'async': 'lib/requirejs-plugins/src/async'
    }
});

define(['async!http://maps.google.com/maps/api/js?sensor=false'], function() {
    // Google Maps API and all its dependencies will be loaded here.
});
Run Code Online (Sandbox Code Playgroud)

  • http://blog.millermedeiros.com/requirejs-2-0-delayed-module-evaluation-and-google-maps/ (7认同)

hug*_*ugs 12

感谢user1706254导致官方文档:https://github.com/millermedeiros/requirejs-plugins/使用的关键字'define'对我不起作用,但'require'工作正常.

我无法直接加载:

require(["goog!maps,3,other_params:sensor=false"], function(){});
Run Code Online (Sandbox Code Playgroud)

但是使用异步方式可以解决问题:

require(['async!http://maps.google.com/maps/api/js?sensor=false'], function(){});
Run Code Online (Sandbox Code Playgroud)


Fin*_*sse 5

您不需要异步插件即可将Google Maps与require.js一起使用。只需使用简单的填充程序配置即可实现此目标:

require.config({
    paths: {
        gmaps: '//maps.googleapis.com/maps/api/js?' // question mark is appended to prevent require.js from adding a .js suffix
    },
    shim: {
        gmaps: {
            exports: 'google.maps'
        }
    }
});

require(['gmaps'], function (gmaps) {
    var center = {lat: -34.397, lng: 150.644}; 
    var map = new gmaps.Map(document.getElementById('map'), {
        center: center,
        zoom: 8
    });
    new gmaps.Marker({
        map: map,
        position: center
    });
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.5/require.js"></script>

<div id="map" style="width: 100%; height: 200px"></div>
Run Code Online (Sandbox Code Playgroud)