JSFiddle - React, Tailwind, and code Playground
by bruth
HTML
<script src="http://underscorejs.org/underscore-min.js"></script>
<script src="http://backbonejs.org/backbone-min.js"></script>
JavaScript
var Deferrable;
Deferrable = {
deferred: {},
initialize: function() {
var method, once, _fn, _ref,
_this = this;
this.pending();
_ref = this.deferred;
_fn = function(method, once) {
var func;
func = _this[method];
return _this[method] = function() {
return _this.defer(method, func, once, arguments);
};
};
for (method in _ref) {
once = _ref[method];
_fn(method, once);
}
},
pending: function(clear) {
if (clear == null) {
clear = false;
}
if ((this._deferred != null) && this.state() === 'pending' && !clear) {
return this;
}
(this._deferred = $.Deferred()).once = {};
return this;
},
defer: function(name, func, once, args) {
if (once == null) {
once = true;
}
if (_.isString(name)) {
if (_.isBoolean(func)) {
once = func;
func = this[name];
}
if (once) {
if (this._deferred[name]) {
return this;
}
this._deferred.once[name] = true;
}
} else {
func = name;
}
this._deferred.done(function() {
return func.apply(null, args);
});
return this;
},
resolve: function(context) {
if (context == null) {
context = this;
}
if (this._deferred) {
this._deferred.resolveWith(context);
}
return this;
},
reject: function(context) {
if (context == null) {
context = this;
}
this._deferred.rejectWith(context);
return this;
},
promise: function() {
var _ref;
return (_ref = this._deferred).promise.apply(_ref, arguments);
},
when: function(func) {
return $.when(this).done(func);
},
state: function() {
return this._deferred.state();
}
};
Deferrable.resolveWith = Deferrable.resolve;
Deferrable.rejectWith = Deferrable.reject;
for (var key in Deferrable) {
Backbone.Model.prototype[key] = Deferrable[key];
Backbone.View.prototype[key] = Deferrable[key];
...