对于模块,我不返回我一直使用的对象而不是define。例如,假设我有以下jQuery插件(jquery.my-plugin.js):
require(['jquery'], function($) {
$.fn.myPlugin = function(options) {
...
};
});
现在,如果我在另一个模块中说出以下内容:
require(['jquery', 'jquery.my-plugin'], function($) {
$('#element').myPlugin();
});
我发现这不起作用,因为myPlugin尚未注册。但是,如果我将require更改为我的jquery.my-plugin模块中的define,那么它可以正常工作。
如果有人能清楚我为什么要这样做,我会很感激。在继续使用它之前,我想完全理解一些东西。感谢
答案 0 :(得分:93)
基本上,当你使用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
。
答案 1 :(得分:2)
下面是应该在 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
});