Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flex
Flex Forum d'entraide sur la programmation Adobe Flex : applications Internet riches (RIA)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/06/2008, 15h42   #1
Membre à l'essai
 
Inscription : avril 2007
Messages : 86
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 86
Points : 22
Points : 22
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 :
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 :
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.
Eruil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 17h39   #2
Rédacteur/Modérateur
 
Avatar de Jim_Nastiq
 
Homme Jean-Marie Macé
Ingénieur consultant, leader Flex
Inscription : avril 2006
Messages : 2 196
Détails du profil
Informations personnelles :
Nom : Homme Jean-Marie Macé
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur consultant, leader Flex
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 196
Points : 3 380
Points : 3 380
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 :
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 :
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 :
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
Jim_Nastiq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 19h28   #3
Membre à l'essai
 
Inscription : avril 2007
Messages : 86
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 86
Points : 22
Points : 22
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 :
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 :
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.
Eruil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 10h28   #4
Rédacteur/Modérateur
 
Avatar de Jim_Nastiq
 
Homme Jean-Marie Macé
Ingénieur consultant, leader Flex
Inscription : avril 2006
Messages : 2 196
Détails du profil
Informations personnelles :
Nom : Homme Jean-Marie Macé
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur consultant, leader Flex
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 196
Points : 3 380
Points : 3 380
Citation:
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



Citation:
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 :
Application.application.parameters.mavariable
Citation:
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 :
1
2
3
 
xmlns="http://www.adobe.com/2006/mxml" 
xmlns:local="*"
le mien :
Code :
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
Jim_Nastiq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 17h54   #5
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605
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 :
1
2
3
<balise attribut="valeur">
   hop
</balise>
Tu utilises ce code :
Code Flex :
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 :
var tonURL:String = ExternalInterface.call("window.location.href.toString");
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 15h56   #6
Membre à l'essai
 
Inscription : avril 2007
Messages : 86
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 86
Points : 22
Points : 22
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 :
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 ....
Eruil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h17.


 
 
 
 
Partenaires

Hébergement Web