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

Flex Discussion :

Accéder à un objet d'un module à partir d'un autre module


Sujet :

Flex

  1. #1
    Membre habitué Avatar de ziad.shady
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 212
    Points : 139
    Points
    139
    Par défaut Accéder à un objet d'un module à partir d'un autre module
    Bonjour,

    En fait je voudrai savoir comment accéder à une instance qui se trouve dans un module à partir d'un autre module.

    Je m'explique:

    J'ai deux modules qui produisent 2 swf différents.

    Dans le premier module j'ai un fichier MyFile.mxml qui contient une instruction de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <mx:ModuleLoader   id="MyModule" url="MySWF.swf" />
    Maintenant à partir du deuxième module je voudrais accéder à cette même instance qui est "MyModule" pour que je puisse appliquer des opérations au dessus.

    Merci d'avance pour toutes vos réponses.

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Salut,

    je vais peut etre t'induire en erreur , mais j'ai un souvenir qu'avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    this.parent
     
    OU
     
    this.parentDocument
     
    OU
     
    this.parentApplication
    tu peux t'en sortir, mais c'est à vérifier

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  3. #3
    Membre actif Avatar de Fares BELHAOUAS
    Homme Profil pro
    Développeur Flex & Java
    Inscrit en
    Mars 2002
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Flex & Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 182
    Points : 252
    Points
    252
    Par défaut
    Salam Ziad,

    La meilleure façon de communiquer entre module est d'utiliser PureMVC multicore, c'est une version améliorée de PureMVC, ça prend un peu de temp pour l'apprendre, mais une fois que c'est fait, tout ira plus vite et bien structuré.
    Bon courage, @ ciao bonsoir!
    --------------
    Mettre le Tag est aussi une aide aux développeurs

  4. #4
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Oui certes PureMVC, si tu utilises PureMVC c'est possible, mais si ce n'est pas le cas, il ne faut pas t'imposer l'utilisation de ce framework si tu n'en a pas réellement besoin! Ce que je veux dire, n'installe pas PureMVC multicore uniquement pour utiliser la communication entre module

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  5. #5
    Membre actif Avatar de Fares BELHAOUAS
    Homme Profil pro
    Développeur Flex & Java
    Inscrit en
    Mars 2002
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Flex & Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 182
    Points : 252
    Points
    252
    Par défaut
    Salam Ziad,

    Voici du code, non PureMVC

    Module1.mxml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300">
    	<mx:Script>
    		<![CDATA[
    			import mx.core.Application;
    		]]>
    	</mx:Script>
    	<mx:Button id="buttonM1" label="Module1"
    		click="{Application.application.moduleLoader2.child.buttonM2.label = 'buttonM2 Modified'}"
    		/>
    </mx:Module>
    Module2.mxml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300">
    	<mx:Script>
    		<![CDATA[
    			import mx.core.Application;
    		]]>
    	</mx:Script>
    	<mx:Button id="buttonM2" label="Module2"
    		click="{Application.application.moduleLoader1.child.buttonM1.label = 'buttonM1 Modified'}"
    		/>
    </mx:Module>
    MonApplication.mxml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    	<mx:VBox id="vBox1">
    		<mx:ModuleLoader id="moduleLoader1" url="Module1.swf"/>
    		<mx:ModuleLoader id="moduleLoader2" url="Module2.swf"/>
    	</mx:VBox>
    </mx:Application>
    Bon courage, @ ciao bonsoir!
    --------------
    Mettre le Tag est aussi une aide aux développeurs

  6. #6
    Membre habitué Avatar de ziad.shady
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 212
    Points : 139
    Points
    139
    Par défaut
    Bonjour à tous,

    Tout d'abord Je vous remercie beaucoup pour vos réponses .

    En fait par rapport à la 1ère réponse de jim_nastiq; j'ai déjà utilisé le this.parentApplication mais cela marche que si la déclaration d'un des modules <mx:ModuleLoader> est faite dans l'application parent. par rapport au deux autres je les ai pas utilisé (je vais en jeter un coup d'oeuil).

    Par rapport à la 1ère réponse de Fares et la 2ème de jim_nastiq, qui consiste sur l'utilisation de PureMVC multicore. A la base j'utilise Cairngorm, je ne sais pas si ce dernier peut offrir également le même mécanisme que celui de PureMVC multicore pour faire communiquer mes modules!
    Sinon est ce qu'il y a moyen de cohabiter les deux micro-architectures pour que je puisse bénéficier de l'apport de PureMVC multicore?

    Par rapport à la 2ème réponse de fares, le souci est que la déclaration de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <mx:ModuleLoader id="moduleLoader1" url="Module1.swf"/>
    <mx:ModuleLoader id="moduleLoader2" url="Module2.swf"/>
    ne devra pas être dans l'application parent <mx:Application> <mx:Application> par ce que ces deux modules seront chargés dans des modules fils différents.

    je vais essayer de donner un aperçu sur la structure de mon application :

    Mon application contient un module A qui servira à charger deux modules B et C.
    La communication entre le module B et C et entre B et les modules chargés sur le module C est bien établie biensûr en passant par le parentApplication.

    Le module C charge à son tour un module D.

    Mon souci c'est d'accéder au module C à travers D et plus précisemment à l'objet qui est "MyModule" de cette déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <mx:ModuleLoader   id="MyModule" url="MySWF.swf" />
    Le but c'est décharger ce module auquel je voudrai y accèder.

    Je me demande si le parentApplication sera utile dans ce cas là!

    Je vous pris de me donner encore de vos solutions si je n'abuse pas.

    Et merci encore.

  7. #7
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    en remontant l'archi avec des this.parent.parent.... tu peux remonter tout en haut(jusqu'a A) et donc de 1 tu peux redescendre sur n'importe quel module... c'est pas terrible, loin de la surtout si l'organisation de tes modules sont appelés à changer...mais ca peut fonctionner

    sinon, pour faire cohabiter CarinGorn et PureMVC , je ne tenterais pas le coup... soit tu utilises CarinGorn soit PureMVC mais un peu des 2 ca me semble franchement pas une bonne idée

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  8. #8
    Membre habitué Avatar de ziad.shady
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 212
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    Merci beaucoup pour ta réponse. Effectivement c'est ce que j'ai essayé de faire cela a l'air de bien marcher, sauf je me trouve face à un petit problème.
    Voici la trace de mon this.parent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ApplicationMain.HdividedBox.modulesLoader.ModuleMain340.tabNav.myVbox.loader.MySwf
    J'explique à quoi ressemble tout cela:

    ApplicationMain: correspond au module qui représente l'application globale où c'est définit le tag <mx:Application>.

    HdividedBox : c'est le fameux composant HDividedBox il se trouve dans le module ApplicationMain et sur lequel je charge un autre module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <mx:ModuleLoader  id="modulesLoader" width="80%" height="100%"/>
    jusqu'ici pas de souci . Maintentant au niveau du module ModuleMain340 chargé par modulesLoader c'est ici où je m'embête . Puisque je peux pas attribuer un id à ce module à chaque fois que je l'exécute il rajoute au nom du module un numéro quelconque (dans ce cas là c'est 340). voici le code du fichier principal de ce module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <mx:Module  xmlns:mx="http://www.adobe.com/2006/mxml"  width="100%">
        <mx:TabNavigator id="tabNav"  width="100%" height="100%">
            <mx:VBox  id="myVbox" label="Show data">
                <mx:ModuleLoader   id="loader" url="MySwf.swf" />            		
            </mx:VBox>
        </mx:TabNavigator>
    </mx:Module>
    J'ai essayé de rajouter le id à <mx:module> mais ça passe pas à la compilation

    Si il y a une autre alternative prière de me le dire.

  9. #9
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    avec la propriété child du ModuleLoader tu ne peux pas récupérer ton DisplayObject?

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  10. #10
    Membre habitué Avatar de ziad.shady
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 212
    Points : 139
    Points
    139
    Par défaut
    Moi je veux pas récupérer le DisplayObject de modulesloader, en fait ce que je veux c'est de récupérer le DisplayObject de MySwf.
    Par ce que le 1er charge le 2ème et le 2ème charge un 3ème, dont je voudrais récupérer son id.

  11. #11
    Membre habitué Avatar de ziad.shady
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 212
    Points : 139
    Points
    139
    Par défaut
    Effectivement c'est exactement ce que tu m'as dit. je remonte l'application et puis je redescends. Le code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Je récupère l'objet sur lequel je veux agir.
    //Dans ce cas là je remonte l'application de deux niveau, et puis je redescends.
    var dp : DisplayObject = this.parent.parent.getChildByName("MyObject");
    //Dans ce cas là je le supprime.
    this.parent.parent.removeChild(dp);
    mais ça tout en restant dans le même module, je vais l'essayer sur deux modules différents, mais il n'y a aucune raison pour que ça ne marche pas.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/01/2015, 17h28
  2. [1.x] Formulaire d'un module à partir d'un autre module
    Par etoileweb dans le forum Symfony
    Réponses: 2
    Dernier message: 19/10/2010, 12h25
  3. Accèder les objets d'une form à partir d'une classe
    Par xyron_x dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/04/2007, 14h49
  4. Accéder à des objets d'une Form à partir d'une classe
    Par kinouseb dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/01/2007, 18h07
  5. [VB]accéder au composant d'une fenetre à partir d'une autre
    Par ennamsaoui dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/04/2006, 11h44

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