jQuery 1.5 bringt das neue Rechnungsabgrenzungs Objekt und die beigefügten Methoden .when, .Deferredund ._Deferred.
Für diejenigen, die noch nicht verwendet .Deferredhaben, 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 .Deferredund .when.
Es wäre auch schön, Beispiele zu sehen ._Deferred.
Das Verknüpfen mit der neuen jQuery.ajaxQuelle 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.
._Deferredist einfach das wahre "Zurückgestellte Objekt", das .Deferredverwendet. Es ist ein internes Objekt, das Sie höchstwahrscheinlich nie brauchen werden.