【问题标题】:Why is my define call not triggering?为什么我的定义调用没有触发?
【发布时间】:2013-04-10 14:09:45
【问题描述】:

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

我将此代码添加到 HTML sn-p 的末尾:

$(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 呼叫没有触发?

【问题讨论】:

    标签: javascript jquery requirejs amd requirejs-define


    【解决方案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);
        });
    });
    

    注意事项:

    • 定义的模块应该存在于单独的文件中。阅读 this page in the API documentation 了解它们的工作原理。
    • 避免在 DOM 就绪回调中要求模块,这意味着您必须等待更长的时间才能请求模块。最好立即开始请求它们并稍后检查 DOM 准备情况。 RequireJS 附带了a DOM ready plugin 就是为了这个。
    • 确保您将 require jQuery 作为一个模块(除非您不使用它)。
    • 将匿名函数传递给$()$(document).ready() 的快捷方式

    【讨论】:

    • 感谢您的信息。我有点不愿意在“不知名的地方”声明我的模块,所以感谢您的再次确认。我只使用了一个 require 调用就让它工作了,但是由于我需要多个页面上的功能,我想将 gmap 注册为一个模块。反正。现在作为模块工作,感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    相关资源
    最近更新 更多