62 votes

comment jquery promesse de la méthode marche vraiment?

Je ne comprends pas vraiment ce délégué et la promesse chose. Selon les docs, délégué lier un sélecteur et de l'événement à une sorte d'emballage récipient qui peut être utilisé à nouveau plus tard pour les actuels et futurs articles?

promesse() remapper les choses quand il a été délimitée si tout nouvellement chargée des matches? Peut-être que je ne comprends pas vraiment cette promesse méthode.

Que faire si l'emballage est toujours là, mais le contenu dans l'emballage conteneur a changé, et ou rechargées via ajax? Pourquoi est-il cassé que les événements ne sont pas le déclenchement ou de travail qu'elle serait la première fois qu'il est "lié"?

Et oui, j'ai été à la documentation de la page, je ne comprends pas leurs explications complètement

201voto

lonesomeday Points 95456

Je suis un peu confus par cette question. Je pense que c'est parce que vous êtes confus par promise et delegate. Ils sont en fait complètement sans rapport avec les fonctionnalités de jQuery. Je vais vous expliquer chacun séparément:

delegate

delegate est une fonction jQuery qui a été introduit dans jQuery 1.4.2. (C'est une belle approche de l' live fonctionnalité qui a été ajoutée dans jQuery 1.3). Il résout un problème particulier qui vient avec la modification du DOM, et en particulier avec des appels AJAX.

Lorsque vous liez un gestionnaire d'événements, de vous lier à une sélection. Donc, vous pourriez ne $('.special').click(fn) de lier un gestionnaire d'événements pour tous les membres de l' special classe. Vous lier à ces éléments, de sorte que si vous supprimez ensuite la classe de l'un de ces éléments, l'événement sera encore déclenchée. Inversement, si vous ajoutez la classe d'un élément (ou d'ajouter un nouvel élément dans le DOM), il n'aura pas le cas liée.

Il n'y est une fonction Javascript qui atténue ce qu'on appelle "remontée d'événements". Lorsqu'un événement est déclenché, le premier navigateur informe l'élément à l'origine de l'événement. Ensuite, il va jusqu'à l'arbre du DOM, et notifie à chaque élément ancêtre. Cela signifie que vous pouvez lier un gestionnaire d'événement sur un élément en haut de l'arborescence DOM, et des événements déclenchés sur tous les éléments enfants (même ceux qui n'existent pas lorsque le gestionnaire est lié).

delegate jQuery est de la mise en œuvre de cette. Tout d'abord, vous sélectionnez un élément parent. Ensuite, vous spécifiez un sélecteur – le gestionnaire sera exécutée uniquement si l'origine de l'élément correspond à ce sélecteur. Ensuite, vous spécifiez un type d'événement, comme click, submit, keydown, tout comme l' bind. Puis, finalement, vous spécifiez le gestionnaire d'événements.

$('#containingElement').delegate('a.special', 'click', function() {
    alert('This will happen on all links with the special class');
});

promise

promise est un autre ajout relativement récent à la jQuery featureset. Il fait partie de l' Deferred concept qui a été introduit dans jQuery 1.5. (Je pense que la similitude de son entre les "différé" et "délégué" est probablement la source de la confusion.) C'est une façon d'abstraction les complications du code asynchrone. Le meilleur exemple de ceci est avec des appels AJAX, comme l'objet renvoyé par $.ajax est Deferred objet. Par exemple:

$.ajax({
    url: 'somepage.cgi',
    data: {foo: 'bar'}
}).done(function() {
    // this will be run when the AJAX request succeeds
}).fail(function() {
    // this will be run when the AJAX request fails
}).always(function() {
    // this will be run when the AJAX request is complete, whether it fails or succeeds
}).done(function() {
    // this will also be run when the AJAX request succeeds
});

C'est donc à bien des égards la même que la liaison de la réussite des gestionnaires dans l' $.ajax d'appel, sauf que vous pouvez lier plus d'un gestionnaire, et vous pouvez les lier après l'appel initial.

Une autre fois, quand il serait utile de traiter de manière asynchrone est avec des animations. Vous pouvez fournir des rappels pour les fonctions, mais il serait encore mieux de le faire avec la même syntaxe que l'AJAX exemple que j'ai fourni ci-dessus.

En jQuery 1.6, cette fonctionnalité a été rendu possible, et promise fait partie de cette mise en œuvre. Vous appelez promise sur un jQuery sélection, et vous obtiendrez un objet que vous pouvez lier des gestionnaires d'événements, lorsque toutes les animations à l'objet réalisé.

Par exemple:

$('div.special').fadeIn(5000).promise().then(function() {
    // run when the animation succeeds
}).then(function() {
    // also run when the animation succeeds
});

Encore une fois, cela a des effets semblables à des méthodes traditionnelles, mais il ajoute de la souplesse. Vous pouvez lier les gestionnaires plus tard, et vous pouvez lier plus d'un.

Résumé

Fondamentalement, il n'y a aucune relation significative entre l' delegate et promise, mais ils sont tous les deux fonctions utiles dans moderne jQuery.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X