diff --git a/backbone.js b/backbone.js index 2eed82d7..3da23a2d 100644 --- a/backbone.js +++ b/backbone.js @@ -41,6 +41,25 @@ // For Backbone's purposes, jQuery, Zepto, or Ender owns the `$` variable. var $ = root.jQuery || root.Zepto || root.ender || root.$; + + // Set the javascript library that will be used for the selector work + // (a.k.a. the `$` variable). + // + // By default Backbone will use: jQuery, Zepto, or Ender; but the `setDomLibrary()` + // method let's you inject an alternate javascript library (or a mock + // library for testing your views outside of a browser). This is also useful + // if you are using a packaging library -- to add support for `require()` + // calls in the browser (e.g. ender or browserify). The scoping used to + // support `require()`, prevents Backbone from automatically loading the + // default javascript library. + // + // Backbone.setDomLibrary(jQuery) + // + Backbone.setDomLibrary = function(lib) { + $ = lib; + }; + + // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable // to its previous owner. Returns a reference to this Backbone object. Backbone.noConflict = function() { diff --git a/test/setdomlibrary.js b/test/setdomlibrary.js new file mode 100644 index 00000000..b957e426 --- /dev/null +++ b/test/setdomlibrary.js @@ -0,0 +1,30 @@ +$(document).ready(function() { + + // a mock object that looks sufficiently jQuery-ish + var myLib = function() { + return { + attr: function() { return "spam" }, + html: function() { return "spam" }, + hasClass: function() { return "spam" } + }; + }; + + var viewAttrs = { id: 'test-setdomlibrary', className: 'test-setdomlibrary' } + + module("Backbone.setDomLibrary"); + + test('Changing jQuery library to custom library', function() { + Backbone.setDomLibrary(myLib); + var view = new Backbone.View(viewAttrs); + + ok(view.$el.hasClass('test-setdomlibrary') === 'spam'); + }); + + test('Changing jQuery library back to global jQuery', function() { + Backbone.setDomLibrary(jQuery); + var view = new Backbone.View(viewAttrs); + + ok(view.$el.hasClass('test-setdomlibrary')); + }); + +}); diff --git a/test/test.html b/test/test.html index eb7fa271..a64bc2ee 100644 --- a/test/test.html +++ b/test/test.html @@ -21,6 +21,7 @@ +