Ecoute d'un event d'une classe

[Résolu]
Signaler
Messages postés
35
Date d'inscription
samedi 16 août 2003
Statut
Membre
Dernière intervention
23 février 2009
-
Messages postés
35
Date d'inscription
samedi 16 août 2003
Statut
Membre
Dernière intervention
23 février 2009
-
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

Messages postés
111
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
1 août 2008

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é...
Messages postés
35
Date d'inscription
samedi 16 août 2003
Statut
Membre
Dernière intervention
23 février 2009

Merci pour la réponse ralecul

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

guepard