jQuery 1.5 bringt das neue Rechnungsabgrenzungs Objekt und die beigefügten Methoden .when
, .Deferred
und ._Deferred
.
Für diejenigen, die noch nicht verwendet .Deferred
haben, habe ich die Quelle dafür mit Anmerkungen versehen .
Was sind die möglichen Verwendungsmöglichkeiten dieser neuen Methoden, wie passen wir sie in Muster an?
Ich habe die API und die Quelle bereits gelesen und weiß, was sie bewirkt. Meine Frage ist, wie wir diese neuen Funktionen im alltäglichen Code verwenden können.
Ich habe ein einfaches Beispiel für eine Pufferklasse, die die AJAX-Anforderung der Reihe nach aufruft. (Der nächste Start nach dem vorherigen endet).
/* Class: Buffer
* methods: append
*
* Constructor: takes a function which will be the task handler to be called
*
* .append appends a task to the buffer. Buffer will only call a task when the
* previous task has finished
*/
var Buffer = function(handler) {
var tasks = [];
// empty resolved deferred object
var deferred = $.when();
// handle the next object
function handleNextTask() {
// if the current deferred task has resolved and there are more tasks
if (deferred.isResolved() && tasks.length > 0) {
// grab a task
var task = tasks.shift();
// set the deferred to be deferred returned from the handler
deferred = handler(task);
// if its not a deferred object then set it to be an empty deferred object
if (!(deferred && deferred.promise)) {
deferred = $.when();
}
// if we have tasks left then handle the next one when the current one
// is done.
if (tasks.length > 0) {
deferred.done(handleNextTask);
}
}
}
// appends a task.
this.append = function(task) {
// add to the array
tasks.push(task);
// handle the next task
handleNextTask();
};
};
Ich suche nach Demonstrationen und Verwendungsmöglichkeiten von .Deferred
und .when
.
Es wäre auch schön, Beispiele zu sehen ._Deferred
.
Das Verknüpfen mit der neuen jQuery.ajax
Quelle für Beispiele ist Betrug.
Mich interessiert besonders, welche Techniken verfügbar sind, wenn wir abstrahieren, ob eine Operation synchron oder asynchron ausgeführt wird.
._Deferred
ist einfach das wahre "Zurückgestellte Objekt", das .Deferred
verwendet. Es ist ein internes Objekt, das Sie höchstwahrscheinlich nie brauchen werden.