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

Ext JS / Sencha Discussion :

ExtJs4 - MVC - Votre façon de tester la présence d'un composant dans sa vue ?


Sujet :

Ext JS / Sencha

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut ExtJs4 - MVC - Votre façon de tester la présence d'un composant dans sa vue ?
    Bonjour à tous,

    Voilà je voudrais avoir votre méthode pour tester la présence d'un composant dans votre Vue?

    en effet, un composant peut très bien être ajouté à une Vue depuis une autre vue.

    Alors voici ce que je fais:

    Dans la Vue, je définie une REFS de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    refs: [
            {ref: 'refWorkZone',    selector: 'viewport > mainview workzone' },
            { ref: 'myWinNotification', selector: 'winnotification' }
        ],
    En l'occurrence, ici il s'agit de l'affichage d'une fenêtre non modal à l'intérieur de ma vue.

    Ensuite, imaginons que j'ai un bouton "Montrer la Fenêtre Notification" dans ma vue, je dois donc tester si la fenêtre n'est pas déjà présente.

    je fais donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        OnShowWinNotification: function() {
            if (!this.getMyWinNotification()) {
                var winNotif = Ext.create('PatentPulse.view.notification.WinNotification');
                this.getRefWorkZone().add(winNotif).show();
            }
        }
    Mais question est: Est-ce une bonne solution d'après vous ?

  2. #2
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    je ne vois pas trop à qui cela peut servir

    Déjà, je n'ai pas de code dans la vue. Donc si je devais le tester ce serait dans le contrôleur.
    Mais si j'ai une autre vue, j'ai aussi un autre contrôleur qui lui est associé.

    Dans ce cas, j'utilise les événements au niveau des contrôleurs pour les faire dialoguer entre eux.

    Je n'ai pas souvenir d'avoir eu besoin de tester la présence d'une autre vue.
    Pour ce qui ressemblerait à ton cas: J'ai donc
    VueA et CtrlA et la fenêtre "WinNotification" VueB CtrlB.

    Sur CtrlB, je capture les événements concernant la vue VueB, entre autres la création et l'affichage de la vue.
    Dans les handlers de ces événements (dans CtrlB), je lance un événement contrôleur vueChangeStatut(statut)
    Qui est un événement que je crée de toute pièce.

    Dans le contrôleur CtrlA, je m'abonne aux événements de CtrlB.
    j'ajoute un membre qui conserve le statut de la VueB
    Lorsque CtrlA reçoit vueChangeStatut(statut), il met à jour le statut.

    Lorsque l'utilisateur agit dans la vue VueA, le contrôleur CtrlA capte les événements et réagit. Dans ces actions, il a déjà l'info sur le statut de VueB.
    Il n'agit pas directement sur la VueB, mais envoie un événement à CtrlB qui lui pilote la VueB.

    Ainsi les deux couples VueA,CtrlA et VueB,CtrlB ne sont en relation que par l'intermédiaire des contrôleurs.
    Les deux couples peuvent évoluer indépendamment.

    Le seul point d'adhérence est la sémantique des événements que les deux contrôleurs s'échangent.

    A+JYT

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Salut Sekaijin,

    Tout d'abord merci pour ta réponse, voici ci dessous quelques points auxquels je voudrais soit répondre soit avoir quelques infos supplémentaires si tu as quelques minutes.

    je ne vois pas trop à qui cela peut servir
    Alors là aucune idée, si ce n'est peut être à un débutant qui a les mêmes interrogations que moi.


    Déjà, je n'ai pas de code dans la vue. Donc si je devais le tester ce serait dans le contrôleur.
    Mais si j'ai une autre vue, j'ai aussi un autre contrôleur qui lui est associé.
    Moi aussi, tout est dans le controller, je n'ai aucune ligne de "code" dans la vue.


    Dans ce cas, j'utilise les événements au niveau des contrôleurs pour les faire dialoguer entre eux.
    Alors voilà c'est la partie qui m’intéresse le plus là, comment faire communiquer mes controllers pour que le controller de la window Notification indique
    au controller de la vue qui contient le bouton "Afficher Window Notification" que celle-ci existe ou pas ?

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    tu as une discu à ce sujet sur sencha
    http://www.sencha.com/forum/showthre...en-controllers

    lorsque la vue est crée le controleur (CtrlB) qui gère la notification peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.fireEvent("viewCreated", this); //le this ici est l'argument de la méthode qui gère l'événement
    le contrôleur qui veut être informé lui dans son ini peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getCtrlB().addListener("viewCreated", this.onNotifCreated, this)
    il suffit alors de définir la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    onNotifCreated : function(Ctrl) //l'argument ici est le this passé au fireEvent
    {
      this.notificationStatut = "created";
    }

    Il s'agit de mettre en place les principes de la programmation événementielle.
    Un action vas généré un événement qui sera utilisé par qui le veux
    la réaction a un événement va agir sur le système et générer de nouveaux événements.

    ce principe est bien implémenté dans le data package.
    dans le datapackage tu as un datastore
    tu ouvre une vue qui affiche son contenu
    les actions utilisateur déclenchent des méthodes du contrôleur
    le contrôleur affiche une formulaire et y place un enregistrement
    l'utilisateur fait des modifs ce qui déclenche des événements. le controleur
    enregistre alors les données dans le datastore
    le datastore déclenche un événement de modif
    le controleur de la grille réagit et mets à jour la grille
    mais le proxy du datastore réagit aussi et envoie les données au serveur.
    le serveur réponds est le proxy mets à jour l'enregistrement dans le datastore
    qui émet un événement pour permettre au controleur de modifier la grid
    etc.

    avec ce principe chacun ne s'occupe que de sa partie et émet des événement pour notifier le reste du système de ce qu'il se passe chez lui.
    on obtient ainsi des composants très autonomes qui ne font que réagir aux événements des autres, faire leur job et émettre à leur tour des événements.

    on est habitué à réagir au click 2click et autres événements de base.
    Mais on a tendance à oublier que l'on peut gérer tout sortes d'événements et en créer soit même.
    l'exemple typique est la gestion des utilisateur.
    lorsqu'un nouvel utilisateur est crée ou lorsqu'un utilisateur est supprimé d'un système il y a toute sorte de chose à faire.
    une des solution est de créer deux événement userAdded et userRemoved. ainsi peut importe comment est fait le système chaque sous système qui en a besoin peut s'abonner à ses événement et faire ce qu'il faut dans sa partie.

    j'ai souvent tendance à dire que si le problème s'exprime "Lorsque .... faire... et faire... puis faire"
    Il est nécessaire de se poser la question événement où pas.

    A+JYT

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Salut Sekaijin,

    Merci pour ce petit cours sur les Events, ça m'éclaircis quelques petites zones un peu flou encore pour moi.

    Merci d'avoir pris le temps de détailler tout ça, c'est très appréciable.

    Je vais mettre en place tout ça et essayer de l'utiliser le plus souvent possible pour rester dans l'esprit Événement !

    E,n te souhaitant une bonne journée !

Discussions similaires

  1. Tester la présence d'un enregistrement dans une table ?
    Par Evocatii dans le forum Requêtes
    Réponses: 5
    Dernier message: 25/02/2008, 21h02
  2. Tester la présence d'une image dans un fichier WORD
    Par porikito dans le forum Débuter
    Réponses: 1
    Dernier message: 05/12/2007, 16h12
  3. Tester la présence d'un caractère dans une chaine
    Par sebinator dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/11/2007, 14h23
  4. Réponses: 4
    Dernier message: 27/04/2006, 17h51
  5. VBA - Tester la présence d'un composant
    Par n1portki dans le forum Général VBA
    Réponses: 1
    Dernier message: 20/09/2005, 05h18

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