ASP.NET AJAX Function.createDelegate vs Function.createCallback?

Je lis le livre manning – asp.net ajax en action. À la page 54-58, les délégués clients et les rappels sont décrits.

en bref:

Avec le délégué client, vous pouvez modifier this variable dans le gestionnaire d'événements lui-même pour refléter un autre objet. (Donc ce ne sera pas l'objet DOM qui a déclenché l'événement pour les événements DOM)

Avec un rappel, vous pouvez passer un context object à votre gestionnaire d'événements qui sera disponible dans le gestionnaire d'événements en tant que deuxième argument / paramètre .

Avec les deux, vous pouvez "passer" un objet au gestionnaire d'événements (qu'il s'agisse de l' context object ) qui ne serait pas disponible pour le gestionnaire d'événements (dans le cadre de celui-ci).

Quelles sont les différences entre ces délégués clients et les rappels?

Pour moi, il semble que:

Seul l'objet que vous souhaitez disposer dans le gestionnaire d'événements est accessible de différentes façons :

  • Délégué client: this
  • Rappel: second argument

… et peut-être que seul le rappel a le DomEvent (premier paramètre) , mais pas le délégué client ?! ??

Est-ce correct? Est-ce tout?

Peut-être que vous pouvez expliquer la différence entre les délégués clients et les rappels.

Je ne suis pas très sûr de cela, mais je pense que le rappel est ce qui se produit lorsque la page est soumise au serveur.

Le client crée un délégué est là pour créer un délégué pour appeler des méthodes JavaScript.

La méthode Function.CreateDelegate () est vraiment utile.

Dites que vous souhaitez gérer un événement de clic de bouton en JavaScript. L'objet "this" disponible dans la fonction qui gère le clic du bouton est le bouton qui a été cliqué.

Maintenant, dites-vous avoir un objet JavaScript qui capture l'événement bouton-clic et fait quelque chose. Normalement, "ceci" se réfère à l'objet JavaScript, mais comme la méthode de l'objet est utilisée pour gérer l'événement de clic de bouton "ceci" fait référence à l'objet qui a soulevé l'événement: le bouton.

Pour contourner cela, la méthode d' application JavaScript a été créée. Ainsi, au lieu de capturer l'événement de clic de bouton en spécifiant la méthode de l'objet JavaScript dans la méthode attachEvent / attachEventListener (ou la méthode $ addHandler () dans le Framework Ajax.NET, vous utiliserez réellement la méthode apply () avec ces éléments attachEvent / AttachEventListener. Cela modifie le contexte afin que "ceci" se réfère à l'objet JavaScript au lieu de l'objet qui a soulevé l'événement.

Maintenant, la méthode Function.CreateDelegate () fait plus que simplement utiliser la méthode d'application dans la création d'un délégué client.

Regardez le code:

 Function.createDelegate = function Function$createDelegate(instance, method) { /// <summary locid="M:J#Function.createDelegate" /> /// <param name="instance" mayBeNull="true"></param> /// <param name="method" type="Function"></param> /// <returns type="Function"></returns> var e = Function._validateParams(arguments, [ {name: "instance", mayBeNull: true}, {name: "method", type: Function} ]); if (e) throw e; return function() { return method.apply(instance, arguments); } } 

Une chose que vous devriez connaître sur la méthode apply (). Lorsque vous l'exécutez, il exécute la méthode qui est le délégué. Pour contourner cela, la méthode createDelegate fait ce qui précède.

Donc, je ne suis pas vraiment sûr de savoir comment un rappel correspond à cela, mais l'utilisation de la méthode createDelegate () est une bonne idée lorsque vos Objets JavaScript gèrent des événements causés par un élément UI.

Je suppose que le rappel est l'action qui se produit lorsque la demande est envoyée du navigateur au serveur. La plupart du temps, la méthode __doPostback est utilisée pour préformer le rappel. Cette méthode prend 2 paramètres … l'objet qui a provoqué le retour / rappel vers le serveur et les arguments pour le retour / rappel. Il s'agirait toutefois d'une chose complètement différente pour le délégué client.

Bonne programmation

-Frinny