Développez en Ajax by PLASSE (Michel)

Développez en Ajax by PLASSE (Michel)

Auteur:PLASSE (Michel) [PLASSE (Michel)]
La langue: fra
Format: epub
Tags: Informatique
Éditeur: O'Reilly
Publié: 2006-08-28T08:14:05+00:00


/** Vérifier que les paramètres sont valides */

check: function(idField) {

// Verifier qu'il y a bien une saisie a suggerer

if (this.source == null) {

Log.error("Element with id '" + idField + "' not found");

}

if (isNaN(parseInt(this.maxSuggestNumber)) ||

parseInt(this.maxSuggestNumber) <= 0) {

Log.error("Max suggest number for '" + idField +

"' not positive (" + this.maxSuggestNumber + ")");

}

},

/** Récuperer les options et les faire afficher

* (méthode abstraite) */

setOptions: function() {

Log.error("setOptions is abstract, must be implemented");

},

/** Les méthodes suivantes restent inchangées */

setBehaviour: function() { ... },

onkeydown: function(aEvent) { ... },

onkeyup: function(aEvent) { ... },

goAndGet: function(index) { ... }

Communication avec le serveur via XMLHttpRequest

159

CHAPITRE 4

}

Suggest.prototype.constructor = Suggest;

En , nous supprimons les paramètres du constructeur, car ce type d’objet sert de type

de base à d’autres, sans pouvoir être instancié. Nous déplaçons les initialisations qu’avait

le constructeur ancien vers la méthode init, définie en , à l’exception de celle concer-

nant la fonction récupérant les suggestions, qui est déplacée dans le type descendant

LocalSuggest.

De même, en , la méthode check ne vérifie plus que la fonction récupérant les valeurs

est bien une fonction. Enfin, en , nous prenons la précaution de générer une erreur si

nous ne redéfinissons pas setOptions. Les autres méthodes restent inchangées.

Le code de LocalSuggest est alors succinct. Le voici, épuré de ses commentaires jsdoc :

function LocalSuggest(idField, getValuesFunction, maxSuggestNumber) {

this.getValues = getValuesFunction;

Suggest.prototype.init.call(this, idField, maxSuggestNumber);

}

LocalSuggest.prototype = new Suggest();

LocalSuggest.prototype.setOptions = function() {

var values = this.getValues(this.source.value,

this.maxSuggestNumber);

this.popup.setOptions(values);

}

LocalSuggest.prototype.check = function(idField) {

// Appeler check du parent

Suggest.prototype.check.call(this, idField);

// Code propre a l'objet

if (typeof(this.getValues) != "function") {

Log.error("Suggestion function for '" +

idField + "' not found");

}

}

LocalSuggest.prototype.constructor = LocalSuggest;

Le constructeur mémorise la fonction récupérant les suggestions et appelle, en , la

méthode init du type parent Suggest. L’héritage de Suggest est spécifié en ligne . En ,

nous implémentons setOptions en reprenant simplement le code initial, avant le décou-

page en deux composants. La méthode check fait appel, en , à celle du type parent et

ajoute sa propre vérification.

Rien de nouveau jusque-là, puisque nous avons simplement réorganisé notre code.

Développez en Ajax

160

Suggestion de saisie en Ajax

Venons-en au composant en Ajax. Voici son constructeur :

function HttpSuggest(idField, getValuesUrl, maxSuggestNumber) {

/** L'url récuperant les valeurs @type String*/

this.url = getValuesUrl;

// Preparer l'url pour recevoir les parametres

if (this.url.indexOf("?") == -1) {

this.url += "?";

}

else {

this.url += "&";

}

/** Requete HTTP @type XMLHttpRequest */

this.request = new XMLHttpRequest();

Suggest.prototype.init.call(this, idField, maxSuggestNumber);

}

HttpSuggest.prototype = new Suggest();

Comme indiqué précédemment, il est hautement préférable de n’avoir à tout moment

qu’une requête de suggestion en cours. Nous la mémorisons ici dans l’attribut request,

ajoutons l’URL de l’appel Ajax et appelons l’initialisation du type parent. Enfin, nous

faisons, en , du type HttpSuggest un héritier du type Suggest.

Nous transformons légèrement l’URL pour tenir compte des différentes formes qu’elle

peut avoir : si elle n’a pas de paramètre, nous ajoutons le point d’interrogation qui en

marque le début ; si elle en a, nous ajoutons l’esperluette (&) qui les continue. Nous

pourrons de la sorte ajouter les paramètres liés à la saisie de la même façon.

C’est précisément la première tâche de la méthode setOptions, qui représente le seul

changement dans HttpSuggest, hormis le constructeur :

HttpSuggest.prototype.setOptions = function() {

try {

// Annuler la requete precedente qui ne sert plus a rien

this.request.abort();

}

catch (exc) {}

try {

var url = this.



Télécharger



Déni de responsabilité:
Ce site ne stocke aucun fichier sur son serveur. Nous ne faisons qu'indexer et lier au contenu fourni par d'autres sites. Veuillez contacter les fournisseurs de contenu pour supprimer le contenu des droits d'auteur, le cas échéant, et nous envoyer un courrier électronique. Nous supprimerons immédiatement les liens ou contenus pertinents.