merging in setDomLibrary

This commit is contained in:
Jeremy Ashkenas
2012-02-02 16:30:56 -05:00
3 changed files with 50 additions and 0 deletions

View File

@@ -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() {

30
test/setdomlibrary.js Normal file
View File

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

View File

@@ -21,6 +21,7 @@
<script type="text/javascript" src="view.js"></script>
<script type="text/javascript" src="sync.js"></script>
<script type="text/javascript" src="speed.js"></script>
<script type="text/javascript" src="setdomlibrary.js"></script>
</head>
<body>
<h1 id="qunit-header">Backbone Test Suite</h1>