Backbone.js RequireJS/BackboneJS应用程序-需要添加依赖项的建议

Backbone.js RequireJS/BackboneJS应用程序-需要添加依赖项的建议,backbone.js,requirejs,Backbone.js,Requirejs,我正在使用backboneJS/requireJS开发一个应用程序。我已经确定了大约20个视图,对于所有使用jquery、backbonejs和下划线的视图。所以我的前三个依赖项总是这三个 define([ 'jquery', 'underscore', 'backbone', .... ], function($, _, Backbone, ..){ ..... }); 是否有一种方法可以跳过并在全局级别的某个地方说,将这三个模块包含在所有模块中,从而避免在所有文件中重复

我正在使用backboneJS/requireJS开发一个应用程序。我已经确定了大约20个视图,对于所有使用jquery、backbonejs和下划线的视图。所以我的前三个依赖项总是这三个

define([
  'jquery', 
  'underscore', 
  'backbone',
 .... ], function($, _, Backbone, ..){
.....

});

是否有一种方法可以跳过并在全局级别的某个地方说,将这三个模块包含在所有模块中,从而避免在所有文件中重复写入它们?

有几种方法可以做到这一点。一种是将
define
包装在您自己的
myDefine
(或其他任何内容)中:

但这显然仍然需要您在回调中指定对象。因此,更好的选择可能是将
$
主干
附加到应用程序名称空间(如果您不希望它们是全局的)。然后你可以这样做:

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
步骤的情况下执行上述操作,并让libs保持在
窗口中

请注意,以上所有内容都未经测试


当然,更简单的选择是在任何模块之前同步加载jQuery、下划线和主干。

谢谢Glortho!我将遵循第二个建议。
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
});