0

我正在使用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调用替换它,则正在加载文件,但我的 gmap 未定义。

问题:
为什么我的define呼叫没有触发?

4

1 回答 1

1

这是因为一旦定义了模块,就需要它。将您的代码更改为这样的代码会起作用:

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

需要注意的一些事项:

  • 定义的模块应该存在于单独的文件中。阅读API 文档中的此页面以了解它们的工作原理。
  • 避免在 DOM 就绪回调中要求模块,这意味着您必须等待更长的时间才能请求模块。最好立即开始请求它们并稍后检查 DOM 准备情况。RequireJS 附带了一个 DOM 就绪插件,就是为了这个。
  • 确保你requirejQuery 作为一个模块(除非你没有这样使用它)。
  • 将匿名函数传递$()$(document).ready()
于 2013-04-10T22:48:38.060 回答