0

I am developing an app using backboneJS/requireJS. I have identified around 20 views, and for all the views I am using jquery, backbonejs and underscorejs. So my first three dependencies are always these three.

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

});

Is there a way i can skip and say somewhere at global level to include these three in all modules, so that I can avoid writing them redundantly in all files?

1 Answer 1

1

There are a few ways to do this. One is to wrap define in your own myDefine (or whatever):

myDefine = function(dependencies, callback) {
  var defaults = ['jquery', 'underscore', 'backbone'],
      combined = defaults.concat(dependencies);

  return define(combined, callback);
};

myDefine(['MyView'], function($, _, Backbone, MyView) {
  // do stuff
});

But this obviously still requires you to specify the objects in your callback. So a better option might be to attach $, _, and Backbone to your application namespace (if you don't want them to be global). Then you could do something like this:

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
});

If you don't care about namespacing, you could just do the above without the myApp steps and let the libs stay in window.

Note that all above is untested.

The simpler option of course is simply to load jQuery, Underscore, and Backbone synchronously before any of your modules.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks Glortho! I would follow the second suggestion.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.