61

对于模块,我不返回我一直在使用 require 而不是定义的对象。例如说我有以下 jQuery 插件(jquery.my-plugin.js):

require(['jquery'], function($) {
    $.fn.myPlugin = function(options) {
        ...
    };
});

现在,如果我在另一个模块中说以下内容:

require(['jquery', 'jquery.my-plugin'], function($) {
    $('#element').myPlugin();
});

我发现这不起作用,因为 myPlugin 尚未注册。但是,如果我将要求更改为我的 jquery.my-plugin 模块中的定义,那么它可以正常工作。

如果有人能澄清为什么我必须这样做,我将不胜感激。在我继续使用它之前,我喜欢完全理解一些东西。谢谢

4

2 回答 2

104

本质上,当您使用时,require您是在说“我想要这个,但我也想要它的所有依赖项”。因此,在下面的示例中,我们需要 A,但 require 将搜索所有依赖项并确保在继续之前加载它们。

require(['a'], function(a) {
    // b, c, d, e will be loaded
});

// File A
define(['b','c','d','e'], function() {
    return this;
});

一般的经验法则是,define当您想要定义一个将被您的应用程序重用的模块并且您使用它require来简单地加载依赖项时,您可以使用。

于 2013-06-28T14:10:50.633 回答
3

下面是应该在jquery.my-plugin.js中的代码,它定义了一个名为“jquery.my-plugin”的模块,可以在其他地方用作依赖项。

define(['jquery'], function($) { //jquery is a dependency to the jquery.my-plugin module
    $.fn.myPlugin = function(options) { //adds a function to the *global* jQuery object, $ (global since jQuery does not follow AMD)
        ...
    };
});

下面是一段代码,您希望将插件函数附加到全局 jQuery 对象,然后使用它...

require(['jquery.my-plugin'], function() { // jquery.my-plugin is loaded which attaches the plugin to the global JQuery object as shown above, then this function fires

    //the only reason $ is visible here is because it's global. If it was a module, you would need to include it as a dependency in the above require statement
    $('#element').myPlugin(); //the $ refers to the global object that has the plugin attached
});
于 2015-01-15T16:32:45.733 回答