通常要求模块如下所示:
define('ModuleName', ['jquery', 'underscore', 'backbone'], function($, _, Backbone){
});因为我的设置中的每个文件都需要下划线和主干,所以我希望它们在模块中自动可用,而不必将它们定义为依赖项。
所以就像这样:
define('ModuleName', ['jquery'], function($){
$("div.someClass").addClass('hide'); // works
var Model = Backbone.Model.extend(); // works too
});这个是可能的吗?
如果是,我必须查找的关键字是怎样的或什么?
发布于 2012-07-07 14:10:40
您感兴趣的模块必须附加到外部作用域。默认情况下,Backbone、Underscore、jQuery等保持附加到全局作用域,除非您对它们调用noConflict() (并不是所有模块都提供此功能)。将模块附加到全局作用域不是一个很好的解决方案,但可以实现您所要求的,而且这是默认行为。更好的替代方法是定义一个外部模块(或者只是一个require()调用),除了命名的子模块之外,它还包含这些依赖项。否则,使用RequireJS的大部分理由都会丢失。
编辑后的示例:
require(['underscore', 'backbone'],
function (_, Backbone) {
define('ModuleName', ['jquery'], function($){
$("div.someClass").addClass('hide'); // works
var Model = Backbone.Model.extend(); // works too
});
//Other modules here, otherwise this is pointless too
}
);即使是这样,也只有在同一文件中定义多个命名模块时才有用。不幸的是,从我的角度来看,最好的解决方案是显式导入模块并允许隐式模块命名,但上面的示例最接近您的要求。至于隐式模块名称,来自the RequireJS api docs
:您可以自己显式命名模块,但这会降低模块的可移植性--如果将文件移动到另一个目录,则需要更改名称。
https://stackoverflow.com/questions/11372709
复制相似问题