IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

MVP élégant avec jQuery


Sujet :

jQuery

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 11
    Points
    11
    Par défaut MVP élégant avec jQuery
    Bonjour à tous !

    je cherche à reproduire le pattern MVP présenté dans cet article
    http://blog.nodejitsu.com/scaling-is...avascript-code

    le tout avec jQuery (mais pas UI pour le moment)

    mon interface est sensée refléter le contenu d'une base de données avec :
    - 1 liste de projets
    - 1 liste de personnes affectées aux projets
    - 1 liste pour choisir des personnes à affecter à un projet
    le tout étant dynamique, régulièrement raffraîchi depuis la base car appli multi-utilisateurs etc

    je ne sais pas trop comment implémenter le pattern MVP.
    la question que je me pose est la suivante :

    --> si j'ai plusieurs listes (N vues) avec autant de sources de données ajaxées (N modèles) dois je avoir N "contrôleurs" (présenteurs) ??

    ou est-ce que un seul présenteur connaissant les N vues et les N modèles est suffisant pour gérer des interactions compliquées (comme des listes interdépendantes par exemple)

    merci pour vos réponses.

    bonne soirée.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 11
    Points
    11
    Par défaut proposition d'implantation
    j(ai donc codé quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    /* présentateur pour les utilisateurs */
    var Presenter_Utilisateurs = function() {
    	console.log('presenter-utilisateurs');
    	var model = new Model_Utilisateurs(this);
    	var view = new View_Utilisateurs(this);	
     
    	/**
    	 * methode d'initialisation
    	 *
    	 */
    	this.init = function() {
    		model.init();
    		view.init();
    	};
     
    	/* methode de recherche des données
    	 * invoquée par le onclick et les autres évènements 
    	 */
    	this.fetch = function(params) {
    		model.query(params);
    	},
     
    	/* méthode de mise à jour de la partie vue
    	 * invoquée par les retours AJAX
    	 */
    	this.update = function(data) {
    		view.render(data);
    	}
     
    };
     
    // avec en extrait le modèle :
    var Model_Utilisateurs = function(presenter) {
     
      var presenter = presenter;
     
      this.init = function() [  /* vide pour le moment */ }
     
      this.query = function(params) {
         $.getJSON( 'http://serveur/index.php/utilisateurs/lister', function(data) {
           presenter.update(data);
         });
      }
    };
     
     
    // vue
    var View_Utilisateurs = function(presenter) {
     
      var presenter = presenter;
     
      this.init : function() { /* vide pour le moment */};
     
      this.render = function(data) {
         // manipulation du DOM avec $('#...')
      };
     
    };

    bon ce n'est pas trop mal codé je crois

    et je repete ce pattern pour tous les widgets de mon interface.

    le problème vient de la façon de coupler les widgets entre eux : comment faire psi on a deux listes dépendantes ?
    comment faire "dialoguer " deux ou plusieurs Presenter ?

    merci d'avance pour les réponses !

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var Model_Utilisateurs = function(presenter) {
     
      var presenter = presenter;
    J'ai jamais compris l'acharnement de certains à vouloir affecter à une variable un paramètre reçu !
    Si tu retires la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var presenter = presenter;
    presenter existera aussi et avec la même valeur...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 11
    Points
    11
    Par défaut pour la cloture javascript
    c'est pour pouvoir l'utiliser en tant que globale dans les méthodes init() et query() ??

    non c'est vrai, c'est peut être une erreur de ma part !
    par le fait des closures javascript 'presenter' (le paramètre) est visible dans les méthodes

    donc c'est vrai que cette affectation semble de trop

    quand à cette écriture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      this.presenter = presenter; // idee de depart
    il est peut être inutile dû à la closure...

    merci pour cet avis, tu vois je maîtrise encore un peu mal ce pattern... je suis en train de l'apprendre à vrai dire !

    je repose ma question : comment faire pour lier plusieurs Presenters en cas de listes interdépendantes ? utiliser pub/sub ?

  5. #5
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 937
    Points
    22 937
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Pourquoi réinventer la roue, il existe déjà une multitude de frameworks divers et variés : http://todomvc.com/

    Tester ces solutions, examiner les avantages, les inconvénients, les méthodes et les codes avant de se lancer dans l'écriture d'une "meilleure" version me paraît indispensable.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    merci de ta réponse, c'est tout à fait pertinent !

    le seul souci vient du fait que je ne suis pas seul à décider... et que l'utilisation d'un des nombreux frameworks JS existants n'est pas encouragée... un "bébé" tel que BackBone "pèse" 800 lignes non compressé et demandera aux personnes qui entretiendront mon code à se former... et elles n'ont pas toujours le temps ou l'envie de le faire...

    donc je me disais que pour faire quelques opérations de CRUD sur cinq ou six lmistes interdépendantes je pourrais peut être écrire "ma" solution en moins de 300 lignes (illusion ?)

    où alors il existe un BackBone "Lite" , je vais encore un peu fouiller dans JSter, peut être trouverais je mon bonheur...

    merci de ton conseil
    bonne journée !

Discussions similaires

  1. [jQuery]Commencer avec JQuery
    Par Axiol dans le forum jQuery
    Réponses: 2
    Dernier message: 11/06/2008, 17h29
  2. controle d'un champ e_mail avec Jquery
    Par ranell dans le forum jQuery
    Réponses: 3
    Dernier message: 23/05/2008, 10h57
  3. Réponses: 6
    Dernier message: 22/04/2008, 19h29
  4. [js]problèmes avec jquery
    Par pomgnon dans le forum jQuery
    Réponses: 3
    Dernier message: 30/03/2007, 21h47
  5. [JQUERY] Comment appeler une fonction php avec jquery
    Par popogendarme dans le forum jQuery
    Réponses: 1
    Dernier message: 20/03/2007, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo