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 :

utiliser un fichier XML


Sujet :

Flex

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 86
    Points : 50
    Points
    50
    Par défaut utiliser un fichier XML
    Bonjour,

    tout d'abord, j'ai commencé à m'interesser à flex depuis avant-hier, donc autant dire que c'est très frais et que j'ai un peu de mal. Je fais donc des recherches depuis quelques jours et j'essaye de me former un peu et de modifier des sources existantes. Voici donc ce que j'essaye de faire : je reprend le projet Displayshelf (http://www.quietlyscheming.com/blog/...elf-component/) et je veux apporter quelques modif. J'ai réussi à y intégrer l'ouverture des photos dans shadowbox Mon objectif suivant (celui sur lequel je bloque) est d'aller piocher les images dans un fichier XML (dans le projet DisplayShelf elles sont codées "en dur" dans un Array)
    j'ai trouvé sur ce forum (toujours aussi merveilleux) un thread dont je me suis très largement inspiré mais je ne m'en sors pas. Merci aux ames charitables qui voudront bien me donner un petit coup de pouce ...

    voici un lien vers mon projet au stade ou il marche encore (avant d'essayer d'intégrer les données en XML)

    eet voici la façon dont j'ai modifier mon MXML :
    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
    <Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*" height="100%" width="100%" layout="absolute" viewSourceURL="download/index.html">
     
    	<Binding source="sel.value" destination="shelf.selectedIndex" />
    	<Binding destination="sel.value" source="shelf.selectedIndex" />
     
    	<mx.Model id="Photos" source="XMLFile.xml"/>
    	<Script>
    		<![CDATA[
    			private function init():void {
          		shelf.dataProvider = this.Photos.image.url as Array
          	}
    		]]>
    	</Script>
    	<local:DisplayShelf id="shelf" horizontalCenter="0" verticalCenter="0"
    		borderThickness="10" borderColor="#FFFFFF" enableHistory="false" width="100%"/>
     
    	<VBox horizontalCenter="0" bottom="80"
    		horizontalAlign="center" verticalAlign="middle" >	 	
    		<HBox>
    			<HSlider liveDragging="true" id="sel" minimum="0" value="0" maximum="{shelf.dataProvider.length}" snapInterval="1" width="400" />
    		</HBox>
    	</VBox>
    </Application>
    mon fichier XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    	<image>
    		<url>img/photos400/photo01.jpg</url>
    	</image>			
    	<image>
    		<url>img/photos400/photo02.jpg</url>
    	</image>
    </root>
    je bloque par exemple sur la fonction init (pompé dans le thread mentionné plus haut), je comprend ce qu'elle fait et ça me semble bien. Mais par contre je ne sais pas si elle s'exécute automatiquement (ce qui m'étonnerait dans l'état, puisqu'elle n'a pas la "tête" 'un constructeur) à la création de l'objet shelf ou si je doit l'appeler (et si oui comment ?)

    Je vous remercie pour les éclaircissements que vous pourrez m'apporter.

  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,

    pour la méthode init() tu dois en effet faire un appel à celle ci! pour cela il faut catcher l'evenement creationComplete de ton application :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Application xmlns:mx="http://www.adobe.com/2006/mxml"
     xmlns:local="*" height="100%" width="100%" 
     layout="absolute" 
     viewSourceURL="download/index.html"
     creationComplete="init()">
    sinon j'ai fait un test (très) rapide qui est fonctionnel(a toi de t'en inspirer ) :

    mon mxml :

    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
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    	xmlns:local="*" height="100%" width="100%" layout="absolute" 
    	viewSourceURL="download/index.html"
    	creationComplete="init()">
     
    	<mx:Binding source="sel.value" destination="shelf.selectedIndex" />
    	<mx:Binding destination="sel.value" source="shelf.selectedIndex" />
     
    	<mx:Model id="Photos" source="XMLFile.xml"/>
    	<mx:Script>
    		<![CDATA[
    			private function init():void {
    	      		shelf.dataProvider = this.Photos.image as Array;
    	      	}
    		]]>
    	</mx:Script>
    	<local:DisplayShelf id="shelf" horizontalCenter="0" verticalCenter="0" 
    		borderThickness="10" borderColor="#FFFFFF" enableHistory="false" width="100%" />
     
    	<mx:VBox horizontalCenter="0" bottom="80"
    		horizontalAlign="center" verticalAlign="middle" >	 	
    		<mx:HBox>
    			<mx:HSlider liveDragging="true" id="sel" minimum="0" value="0" maximum="{shelf.dataProvider.length}" snapInterval="1" width="400" />
    		</mx:HBox>
    	</mx:VBox>
    </mx:Application>
    mon xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    	<image>img/photo01.jpg</image>			
    	<image>img/photo02.jpg</image>
    </root>

    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 du Club
    Inscrit en
    Avril 2007
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 86
    Points : 50
    Points
    50
    Par défaut WOUAHOU
    wouah ... balèze. Ca marche nickel.

    deux questions avant de clore le sujet et de le tagger résolu :

    1°) n'est-il pas possible de garder mon modèle XML (c'est-à dire avec le <url></url>). Car même si c'est inutile pour l'instant, l'une de mes prochaines étapes va être de rajouter des propriétés (comme un titre et un commentaire par exemple). evidemment, débutant que je suis j'ai essayé bêtement un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shelf.dataProvider = this.Photos.image.url as array
    mais bien sur comme tu dois le savoir ça ne fonctionne pas ... maintenant je le sais aussi

    2°) Je voudrais récupérer le nom du fichier XML dans l'URL. J'ai donc modifié mon MXML comme suit :
    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
    <Application xmlns="http://www.adobe.com/2006/mxml" xmlns:local="*" height="100%" width="100%" layout="absolute" viewSourceURL="download/index.html" creationComplete="{init();}">
    	<Binding source="sel.value" destination="shelf.selectedIndex" />
    	<Binding destination="sel.value" source="shelf.selectedIndex" />
     
    	<Model id="Photos"/>
    	<Script>
    		<![CDATA[
    			private function init():void {
    				if (Application.application.parameters['XMLPath'] == '') {
    					Photos.source = "XMLFile2.xml";
    					}
    				else {
    					Photos.source = Application.application.parameters['XMLPath'];
    					}
    	      		shelf.dataProvider = this.Photos.image as Array;
    	      	}
    		]]>
    	</Script>
    	<local:DisplayShelf id="shelf" horizontalCenter="0" verticalCenter="0"
    		borderThickness="10" borderColor="#FFFFFF" enableHistory="false" width="100%"/>
     
    	<VBox horizontalCenter="0" bottom="80"
    		horizontalAlign="center" verticalAlign="middle" >	 	
    		<HBox>
    			<HSlider liveDragging="true" id="sel" minimum="0" value="0" maximum="{shelf.dataProvider.length}" snapInterval="1" width="400" />
    		</HBox>
    	</VBox>
    </Application>
    et ça ne marche pas ! Je pense que le problème c'est "Photos.source = " je ne suis pas persuadé que l'on puisse écrire cela ....

    3°) pour ma culture perso. je vois de partout dans les codes sur google ou dans ce forum des "mx:", que signifient-ils ? Moi quand je met des "mx:" flexbuilder n'est pas content, Pourquoi ?

    merci encore pour l'étape que tu viens de m'aider à franchir.

  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
    1°) n'est-il pas possible de garder mon modèle XML (c'est-à dire avec le <url></url>).
    si cela est tout a fait possible , je n'ai plus la syntaxe en tête pour cela mais en cherchant avec le mot clé E4X (outil pour lire du xml avec la norme ecmascript) tu y arriveras. tu peux t'appuyer sur un article de sephiroth.

    EDIT: en fait il faut que tu déclares ton composant en tant que XML et non Model



    2°) Je voudrais récupérer le nom du fichier XML dans l'URL.
    tu dois utiliser les flashvars, il faut donc déclarer ta variables dans ta page html appelant ton swf.( index.template.html avec flex builder, ca t'éviteras de l'ecrire pares chaque compil' ), je ne te détail pas comment ajouter cette variable cela dépend de l'instanciation de ton objet flash dans ta page html...
    Tu peux alors récupérer ta flashvars avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.application.parameters.mavariable
    3°) pour ma culture perso. je vois de partout dans les codes sur google ou dans ce forum des "mx:", que signifient-ils ? Moi quand je met des "mx:" flexbuilder n'est pas content, Pourquoi ?

    merci encore pour l'étape que tu viens de m'aider à franchir.
    mx c'est le namespace du framework flex, dans ton tag Application tu déclares les paths pour tes namespaces :

    ton tag Application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    xmlns="http://www.adobe.com/2006/mxml" 
    xmlns:local="*"
    le mien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:local="*"

    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 expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    Salut,

    Pour ajouter un attribut à une balise XML tu dois utiliser un Objet de type XML et le caractère @.
    Par exemple pour avoir ce XML :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <balise attribut="valeur">
       hop
    </balise>
    Tu utilises ce code :
    Code Flex : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tonObjetXML = new XML(<balise/>);
    tonObjetXML.@attribut = "valeur";
    tonObjetXML.prependChild("hop");

    Pour le truc de l'URL j'ai pas tout compris mais pour la récupérer tu peux faire :
    Code Flex : Sélectionner tout - Visualiser dans une fenêtre à part
    var tonURL:String = ExternalInterface.call("window.location.href.toString");

  6. #6
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 86
    Points : 50
    Points
    50
    Par défaut
    merci pour vos réponses je progresse petit à petit (c'est pour ça que je met autant de temps entre mes posts, je chercher et j'essaye d'assimiler et ça prend du temps)

    pour le 1°) je verrais ça plus tard.

    2°) j'ai réussi à récupérer le nom du fichier XML grâce au flashvars (merci Jim_Nastiq).

    cependant, maintenant que j'ai le nom et le path du fichier c'est beau, mais il faut que je puisse l'utiliser pour afficher les photos qui sont dedans. Et j'ai l'impression (dites moi si je me trompe) que je ne peux plus utiliser mon composant <model> car d'après ce que j'ai lu le XML est intégré lors de la compil et non au runtime. Donc j'ai essayé de trouver une autre méthode et j'ai fait ça :
    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
    <Script>
    		<![CDATA[
    			public var myXML:XML = new XML();
    			private function init():void {
    			//	var XML_URL:String = Application.application.parameters.theXMLfile;;
    				var myXMLURL:URLRequest = new URLRequest(XML_URL);
    				var myLoader:URLLoader = new URLLoader(myXMLURL);
    				myLoader.addEventListener("complete", xmlLoaded);
    				function xmlLoaded(event:Event):void
    				{
    				    myXML = XML(myLoader.data);
                                        trace(myXML);
    				    Application.application.shelf.dataProvider = myXML.image as Array;
    				}
    	      	}
    		]]>
    	</Script>
    le reste du code n'a pas bougé mis à part que j'ai viré le <model>

    trace(myXML) me prouve que le fichier XML est bien récupéré et bien lu. Cependant la ligne juste après ne fonctionne pas (comme si à cet endroit là du code je ne pouvais pas modifier la propriété Application.application.shelf.dataProvider. ça compile mais cette affectation n'est pas prise en compte. Tout d'abord j'avais essayer un this.shelf.dataProvider mais là ça ne compilais pas (par problème de scope je pense)

    si vous aviez encore quelques tuyaux à me donner ....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser un fichier XML comme table
    Par newbeewan dans le forum Hibernate
    Réponses: 1
    Dernier message: 14/04/2008, 18h06
  2. Réponses: 1
    Dernier message: 15/11/2007, 12h47
  3. [AJAX] Impossible d'utiliser mon fichier XML sous IE
    Par iluv dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/06/2007, 12h01
  4. utilisation de fichiers XML
    Par cfrelet dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 16/05/2006, 18h14
  5. Utiliser un fichier XML sur un serveur FTP
    Par ired dans le forum Bases de données
    Réponses: 1
    Dernier message: 06/04/2005, 13h43

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