Ecoute d'un event d'une classe

Résolu
guepard53 Messages postés 35 Date d'inscription samedi 16 août 2003 Statut Membre Dernière intervention 23 février 2009 - 3 juin 2008 à 16:42
guepard53 Messages postés 35 Date d'inscription samedi 16 août 2003 Statut Membre Dernière intervention 23 février 2009 - 4 juin 2008 à 13:52
Bien le bonjour,

j'ai fait une classe JS permettant d'afficher une datagrid avec paging, tri, ajout, suppression, edition, ...
En gros, je passe un array à mon instance de classe et la grid se dessine avec les différents boutons permettant de trier, éditer/supprimer une ligne, ...

Seulement je ne suis pas sûr d'avoir fait cela proprement pour ce qui est de l'édition par exemple.

Quand je clique sur le bouton d'édition sur une ligne de ma grid, ça remplace la ligne par une ligne d'édition (avec textboxes, combobox, ...) pour permettre de saisir les nouvelles valeurs pour ma ligne. Tout cela fonctionne bien.
Là où j'hésite, c'est quand on veut sauver les modifications (via le bouton save de la ligne d'édition).

Pour le moment, j'appelle une méthode editLine() dans laquelle j'appelle une méthode de ma classe et à laquelle je passe un array contenant les nouvelles valeurs ainsi que l'id de la ligne (càd tout ce qu'il faut pour pouvoir modifier la ligne dans ma DB).
Et hors de ma classe, j'implémente la méthode pour récupérer le tableau et l'id. Je me demande si cette façon de faire (qui fonctionne) est propre et orientée objet...? J'aurais préféré pouvoir déclencher un event dans ma classe et utiliser un ecouteur hors de ma classe pour réagir quand l'event survient.

Donc pour faire un petit exemple :

//ma classe
function myClass(div)
{
       //on déclenche le pseudo event en passant le tableau avec les infos de l'édition
       this.onEdit(myArray);
}

//instanciation de ma classe
var myGrid = new myClass();

//pseudo écouteur
myGrid.onEdit = function(editedLine)
{
       //on met à jour la DB avec les infos qui se trouve dans editedLine
}

Ca fonctionne mais si le pseudo écouteur n'est pas implémenté par l'utilisateur de ma classe, ça plante quand on effectue l'appel à onEdit dans la classe. Pas top quoi.

Qu'en pensent les cadors de la POO JS ?

Merci d'avance !

guepard

2 réponses

ralecul Messages postés 111 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 1 août 2008
4 juin 2008 à 10:23
Salut,

Je te propose une solution avec passage d'options à la prototype :

function myClass(div, options)
{
       var _options = options || {};
       var _onEdit  = _options.onEdit || false;
           
       //on déclenche le pseudo event en passant le tableau avec les infos de l'édition
       if (_onEdit)
            _onEdit(this, myArray); //ça peut être utile de faire passer la référence à this.
       else
            alert("onEdit must be specified !");

      //juste pour expliquer l'interet du passage de this
      this.getName = function()
     {
         return "coucou";
     };
}

//instanciation de la classe avec oublie de la callback -> alert
var myGrid = new myClass("nomDuDiv");

//instanciation de la classe avec la callback
var myGrid = new myClass("nomDuDiv", {
    onEdit : function(myGrid2, myArray2) {
        //new Ajax.Request(); -> prototype...
        //myGrid2.getName(); -> pour montrer l'interet du passage de this
    }
});

PS : code non testé...
3
guepard53 Messages postés 35 Date d'inscription samedi 16 août 2003 Statut Membre Dernière intervention 23 février 2009
4 juin 2008 à 13:52
Merci pour la réponse ralecul

Donc ma façon de faire ne choque personne ?
Cool.

guepard
0
Rejoignez-nous