我正在使用backboneJS / requireJS开发一个应用程序。我已经确定了大约20个视图,并且对于我使用jquery,backbonejs和underscorejs的所有视图。所以我的前三个依赖项总是这三个。
define([
'jquery',
'underscore',
'backbone',
.... ], function($, _, Backbone, ..){
.....
});
有没有办法可以在全局范围内跳过并说明在所有模块中包含这三个模块,以便我可以避免在所有文件中冗余地写入它们?
答案 0 :(得分:1)
有几种方法可以做到这一点。一种是将define
包裹在您自己的myDefine
(或其他)中:
myDefine = function(dependencies, callback) {
var defaults = ['jquery', 'underscore', 'backbone'],
combined = defaults.concat(dependencies);
return define(combined, callback);
};
myDefine(['MyView'], function($, _, Backbone, MyView) {
// do stuff
});
但显然仍需要您在回调中指定对象。因此,更好的选择可能是将$
,_
和Backbone
附加到您的应用程序命名空间(如果您不希望它们是全局的)。然后你可以做这样的事情:
myDefine = function(dependencies, callback) {
var defaults = ['jquery', 'underscore', 'backbone'];
if (myApp.$ && myApp._ && myApp.Backbone) {
define(dependencies, callback);
} else {
require(defaults, function($, _, Backbone) {
myApp.$ = $;
myApp._ = _;
myApp.Backbone = Backbone;
define(dependencies, callback);
}
}
};
myDefine(['MyView'], function(MyView) {
// use myApp.$, myApp._, myApp.Backbone
});
如果您不关心命名空间,则可以在不执行myApp
步骤的情况下执行上述操作,并让lib保留在window
。
请注意,以上所有内容均未经过测试。
当然,更简单的选择就是在任何模块之前同步加载jQuery,Underscore和Backbone。