Use a closure with a private variable for $.cache's requests.

This commit is contained in:
Nicolas Stepien 2012-09-06 01:22:29 +02:00
parent 606875c292
commit 9f3b9a2127
2 changed files with 50 additions and 45 deletions

View File

@ -369,37 +369,40 @@
r.send(form); r.send(form);
return r; return r;
}, },
cache: function(url, cb) { cache: (function() {
var req, reqs, _base; var reqs;
reqs = (_base = $.cache).requests || (_base.requests = {}); reqs = {};
if (req = reqs[url]) { return function(url, cb) {
if (req.readyState === 4) { var req;
cb.call(req); if (req = reqs[url]) {
} else { if (req.readyState === 4) {
req.callbacks.push(cb); cb.call(req);
} } else {
return; req.callbacks.push(cb);
}
req = $.ajax(url, {
onload: function() {
var _i, _len, _ref;
_ref = this.callbacks;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
cb = _ref[_i];
cb.call(this);
} }
return delete this.callbacks; return;
},
onabort: function() {
return delete reqs[url];
},
onerror: function() {
return delete reqs[url];
} }
}); req = $.ajax(url, {
req.callbacks = [cb]; onload: function() {
return reqs[url] = req; var _i, _len, _ref;
}, _ref = this.callbacks;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
cb = _ref[_i];
cb.call(this);
}
return delete this.callbacks;
},
onabort: function() {
return delete reqs[url];
},
onerror: function() {
return delete reqs[url];
}
});
req.callbacks = [cb];
return reqs[url] = req;
};
})(),
cb: { cb: {
checked: function() { checked: function() {
$.set(this.name, this.checked); $.set(this.name, this.checked);

View File

@ -295,22 +295,24 @@ $.extend $,
$.extend r.upload, upCallbacks $.extend r.upload, upCallbacks
r.send form r.send form
r r
cache: (url, cb) -> cache: (->
reqs = $.cache.requests or= {} reqs = {}
if req = reqs[url] (url, cb) ->
if req.readyState is 4 if req = reqs[url]
cb.call req if req.readyState is 4
else cb.call req
req.callbacks.push cb else
return req.callbacks.push cb
req = $.ajax url, return
onload: -> req = $.ajax url,
cb.call @ for cb in @callbacks onload: ->
delete @callbacks cb.call @ for cb in @callbacks
onabort: -> delete reqs[url] delete @callbacks
onerror: -> delete reqs[url] onabort: -> delete reqs[url]
req.callbacks = [cb] onerror: -> delete reqs[url]
reqs[url] = req req.callbacks = [cb]
reqs[url] = req
)()
cb: cb:
checked: -> checked: ->
$.set @name, @checked $.set @name, @checked