Javascript 为什么我的定义呼叫没有触发?

Javascript 为什么我的定义呼叫没有触发?,javascript,jquery,requirejs,amd,requirejs-define,Javascript,Jquery,Requirejs,Amd,Requirejs Define,我正在使用requireJS并试图定义一个谷歌地图模块 我将此代码添加到HTML代码段的末尾: $(document).ready(function() { console.log("ready"); define(['async!http://maps.google.com/maps/api/js?v=3&sensor=false'], function (gmap) { console.log(gmap); }); }); “就绪”控制台正在记录,但d

我正在使用
requireJS
并试图定义一个谷歌地图模块

我将此代码添加到HTML代码段的末尾:

$(document).ready(function() {
  console.log("ready");
  define(['async!http://maps.google.com/maps/api/js?v=3&sensor=false'],
   function (gmap) {
     console.log(gmap);
   });
});
“就绪”控制台正在记录,但
define
调用未触发。如果我将其替换为
require
调用,则文件正在加载,但I gmap未定义

问题:

为什么我的
define
呼叫没有触发

这是因为一旦定义了一个模块,就需要它。将您的代码更改为类似以下内容将有效:

// gmap.js (for example)
define(['async!http://maps.google.com/maps/api/js?v=3&sensor=false'], function(gmap) {
    // Do some stuff

    return gmap;
});

// main.js
require(['jquery', 'path/to/gmap'], function($, gmap) {
    $(function() {
        console.log(gmap);
    });
});
需要注意的一些事项:

  • 定义的模块应存在于单个文件中。通过阅读了解它们是如何工作的
  • 避免在DOM就绪回调中需要模块,这意味着您必须等待更长的时间才能请求模块。最好立即开始请求它们,稍后检查DOM是否准备就绪。RequireJS就是为了这个
  • 确保
    需要
    jQuery作为一个模块(除非您不是这样使用它)
  • 将匿名函数传递给
    $()
    $(document.ready()

谢谢您提供的信息。我有点不愿意将我的模块声明为“不知何处”,因此感谢您的再次确认。我只用了一个require调用就让它工作了,但是因为我需要多个页面上的功能,所以我想把gmap注册为一个模块。无论如何现在作为模块工作,所以感谢您的帮助!