hello :) je te réponds rapidement car pas trop de temps ;) J'espère que quelqu'un pourra t'aider beaucoup mieux (je t'avoue que j'ai pas très envie à l'heure actuelle de lire ton code désolé) :)
Pour ma part j'ai totalement abandonné l'idée d'utiliser Flex et son MXML :) Pour moi seul l'AS3 et des projets pure AS3 permettent d'assurer une application souple, légère et performante. Alors c'est vrai qu'en AS3 on n'a pas grand chose niveau composant, gestion de layout, etc.. quand on débute mais sérieusement pour ton type d'application si j'étais toi je me demanderai vraiment si le MXML est vraiment une bonne chose ;) Avec une petite charte réalisée simplement avec des clips dans Flash (pour créer le skin avec des clips simples et juste des noms d'occurences ou des symboles dans la bibliothèque) et surtout de l'AS3 simple pour gérer le tout ... tout devrait être plus simple. Maintenant je veux pas t'empêcher de faire du Flex avec du MXML mais franchement plus je vois ce qui est fait avec.. et plus je vois l'orientation de Adobe au niveau de Flex.. je me dis que si tu es plus à l'aise en AS3 qu'en MXML c'est étrange que tu sois pas rapidement découragé par la structure du framework flex :) EKA + :) Le 24 février 2009 17:45, Simon <[email protected]> a écrit : > > Bonjour, > > En guise d'apprentissage je suis en train de réaliser un agrégateur de > flux rss. je m'inspire du widgets-rss de netvibes. > J'ai lu sur ce groupe un article sur le "code behind" ( > > http://weblogs.macromedia.com/paulw/archives/presentationpatterns/codebehind/demo/srcview/index.html > ) et je trouve cette méthode élégante (et surtout rassurante pour > commencer car je connais + l'as3 que le MXML...) > > voila où j'en suis arrivé pour le moment sur mon projet (je sais pas > si je peux l'uploader ici ?, alors je copie-colle...) : > > ma classe MXML principale > <?xml version="1.0" encoding="utf-8"?> > <mx:Application > xmlns:mx="http://www.adobe.com/2006/mxml" > xmlns:lecteur_rss="LecteurRss.*" > width="800" height="600" > layout="vertical" > name="Lecteur"> > <lecteur_rss:BarreDeControleMXML /> > > <mx:states> > <mx:State name="ajout"> > <mx:AddChild position="lastChild"> > <lecteur_rss:LecteurRssMXML/> > </mx:AddChild> > </mx:State> > </mx:states> > > </mx:Application> > > > > la barre de controle MXML > <?xml version="1.0" encoding="utf-8"?> > > <lecteur_rss:BarreDeControleCLass > xmlns:mx="http://www.adobe.com/2006/mxml" > xmlns:lecteur_rss="LecteurRss.*" > name="BarreDeControle"> > > <mx:Button > id="add_flux" > label="Ajouter" /> > > <mx:TextInput > id="url_txt" > width="100%" > text="http://www.clubic.com/xml/news.xml" > color="#AAAAAA"/> > > </lecteur_rss:BarreDeControleCLass> > <!-- icon="@Embed(source='ressources/add.png')" --> > > et sa classe AS associée > package LecteurRss > { > import flash.events.MouseEvent; > > import mx.containers.ApplicationControlBar; > import mx.controls.Button; > import mx.controls.TextInput; > import mx.core.UIComponent; > import mx.events.FlexEvent; > > public class BarreDeControleCLass extends ApplicationControlBar > { > public var add_flux:Button > public var url_txt:TextInput; > > public function BarreDeControleCLass() > { > this.dock = true; > addEventListener(FlexEvent.CREATION_COMPLETE, init > ); > } > > private function init( e:FlexEvent ) :void > { > add_flux.addEventListener(MouseEvent.CLICK, > onAddFlux, false, 0, > true ); > } > > private function onAddFlux( e:MouseEvent ):void > { > UIComponent(parent).currentState = "ajout"; > } > > } > } > > le panel de lecture MXML > <?xml version="1.0" encoding="utf-8"?> > <lecteur_rss:LecteurRssClass > xmlns:mx="http://www.adobe.com/2006/mxml" > xmlns:lecteur_rss="LecteurRss.*" > width="400" height="308" > horizontalScrollPolicy="off" > layout="absolute" > name="lecteurRSS" > title="Flux"> > > <mx:List > id="listeItems" > width="100%" height="100%" > variableRowHeight="true" > alternatingItemColors="[#EEEEEE,#FFFFFF]"/> > > </lecteur_rss:LecteurRssClass> > > et sa classe associée > package LecteurRss > { > import flash.events.Event; > import flash.events.IOErrorEvent; > import flash.net.URLLoader; > import flash.net.URLRequest; > > import mx.collections.ArrayCollection; > import mx.containers.Panel; > import mx.controls.Alert; > import mx.controls.List; > import mx.core.ClassFactory; > import mx.events.FlexEvent; > > public class LecteurRssClass extends Panel > { > public var listeItems:List; > private var newsCollection:ArrayCollection = new > ArrayCollection(); > private var l:URLLoader; > > public function LecteurRssClass() > { > addEventListener(FlexEvent.CREATION_COMPLETE, init > ); > } > > private function init(e:FlexEvent):void > { > /* > var flux_url:String = " > http://www.flashandmath.com/rss/ > flash_and_math.xml"; > var flux_url:String = " > http://www.canardpc.com/feed.php"; > */ > > var flux_url:String = > parentApplication.controlBar.url_txt.text; > var flux:Flux = new Flux( flux_url ); > > var req:URLRequest = new URLRequest( flux.url ); > l = new URLLoader; > > try { > l.load( req ); > } catch (error:SecurityError) > { > Alert.show(error.message,"Erreur"); > } > > l.addEventListener(IOErrorEvent.IO_ERROR, > onErreur); > l.addEventListener(Event.COMPLETE, onChargementFini > ); > } > > > private function onChargementFini( e:Event ):void > { > // TODO : tester si le flux est bien valide > var xml:XML = new XML(e.target.data) > var nbNews:int = xml.channel.item.length(); > > // newsCollection comme dataProvider de listeItems > listeItems.dataProvider = newsCollection; > listeItems.itemRenderer = new ClassFactory( > NewsRendererMXML ); > > for(var i:int = 0 ; i < nbNews ; i++) > { > // TODO : faire un objet News > var news:Object = new Object(); > news.titre = xml.channel.item[i].title; > news.lien = xml.channel.item[i].link; > news.description = xml.channel.item[i].description; > news.date = xml.channel.item[i].pubDate; > news.index = i; > > newsCollection.addItem( news ); > } > > } > > private function ListLabelFunction(item:Object):String > { > return "("+item.date+")\n"+item.titre; > } > > private function onErreur( error:IOErrorEvent ):void > { > Alert.show(error.text,"Erreur"); > } > > } > } > > et enfin l'itemRenderer MXML de List > <?xml version="1.0" encoding="utf-8"?> > > <lecteur_rss:NewsRendererClass > xmlns:mx="http://www.adobe.com/2006/mxml" > xmlns:lecteur_rss="LecteurRss.*"> > > <mx:Text > height="100%" > id="item_txt"/> > > </lecteur_rss:NewsRendererClass> > > et sa classe AS associée > package LecteurRss > { > import mx.containers.VBox; > import mx.controls.Text; > import mx.events.FlexEvent; > > public class NewsRendererClass extends VBox > { > > public var item_txt:Text; > > public function NewsRendererClass() > { > addEventListener( FlexEvent.DATA_CHANGE, init, > false, 0, true ); > // A voir, ici pb si j'utilise CREATION_COMPLETE > //addEventListener( FlexEvent.CREATION_COMPLETE, > init, false, 0, > true ); > } > > private function init( e:FlexEvent ) :void > { > item_txt.selectable = false; > item_txt.text = "("+data.date+") \n" + data.titre; > item_txt.toolTip = data.description; > } > > } > } > > Mon début de projet fonctionne mais il y a du bricolage, et j'aurai > besoin d'un coup de pouce pour le restructurer avant de continuer > > voici les points sur lesquels je butte : > > 1) l'apparition de composants > pour l'instant j'ai reussi a faire un truc avec le State dans > LecteurRssMXML, est ce une bonne methode ? > ca ne me semble pas tres pratique surtout je suis plutôt habitué aux > addChild (que j'ai pas réussi a faire ...) > > 2) la communication entre les différents composants > > pour le moment j'ai fait un : > UIComponent(parent).currentState = "ajout"; > dans ma barre de controle pour effectuer le changement d'état > et > parentApplication.controlBar.url_txt.text; > dans lecteurRSSClass.as pour recup l'url qui est dans la barre de > commande > > 3) et enfin j'ai eu un pb avec le FlexEvent.CREATION_COMPLETE et le > composant List > Dans NewsRendererClass si j'utilise FlexEvent.CREATION_COMPLETE, ma > Liste boucle toujours sur les n 1er items, n etant le nombre > d'éléments initialement affichés > > d'avance merci pour vos remarques et conseils ! > > > --~--~---------~--~----~------------~-------~--~----~ Vous avez reçu ce message, car vous êtes abonné au groupe Groupe "FCNG" de Google Groupes. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour afficher d'autres options, visitez ce groupe à l'adresse http://groups.google.com/group/FCNG?hl=fr -~----------~----~----~----~------~----~------~--~---
