我有一个骨干项目,我使用require.js来模块化代码。
我的main.js看起来像这样:
require.config({
paths:{
jquery:'../../../../core/js/external/jquery/jquery-1.8.2',
underscore:'../../../../core/js/external/underscore/underscore',
backbone:'../../../../core/js/external/backbone/backbone',
text:'../../../../core/js/external/require/text',
backbone_paginate:'../../../../core/js/external/backbone/backbone.pagination',
'jquery.sprites':'../../../../core/js/sprites',
'jquery.sprite_util':'../../../../core/js/util/spriteUtil'
},
shim:{
'backbone':{
deps:['underscore', 'jquery'],
exports:'Backbone'
},
'underscore':{
exports:'_'
},
'jquery.blades':{
deps:['jquery']
},
'jquery.sprites':{
deps:['jquery']
},
'jquery.sprite_util':{
deps:['jquery.sprites']
}
}
}
});
require(['../app'], function (AppView) {
"use strict";
new AppView();
});
所以,这里的jquery.sprites和jquery.utils是我需要使用的插件,而不是在我的视图中包含它们。目前,无论在何处使用,我都必须将它们包含在任何地方。例如:
define([
'jquery',
'underscore',
'backbone',
'views/SimpleNamedObjectView',
'jquery.sprites',
'jquery.sprite_util',
], function($, _, Backbone, SimpleNamedObjectView){
"use strict";
有没有办法可以访问jquery.sprites和jquery.sprite_util而不在每个视图中包含它们?它可以从main.js的所有视图变为全局,以便我可以使用这些插件的功能而不将它们包含在所有视图中吗? 例如这个。$ el.getSprites(); (其中getSprites是jquery.sprites的方法)
答案 0 :(得分:3)
一旦它们被加载,因为它们已经“填充”,它们将在全球范围内可用。
因此,您可以在require
内的引导main.js
调用中将它们称为依赖项。这样可行。
但是!这完全违背了Require.js和AMD的理念。每个模块都应声明所有依赖项,以便它们可以单独加载并按原样工作。这样也可以更容易进行单元测试。
所以,是的,你可以,但你真的不应该这样做。