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 :

Data binding avec des Vector


Sujet :

Flex

  1. #1
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut Data binding avec des Vector
    Bonjour,

    J'ai eu une surprise en constatant une erreur (pas du tout explicite) sous flex builder qui semble liée au databinding avec un Vector.

    Pour en avoir le coeur net, j'ai recréé un projet tout simple :

    Main.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
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:view="view.*">
     
    	<mx:Script>
    		<![CDATA[
    			import model.MonObjet;
    			import __AS3__.vec.Vector;
    			[Bindable]
    			public var vecteur:Vector.<MonObjet>;
     
     
    		]]>
    	</mx:Script>
     
    	<view:MonComposant monVecteur="{vecteur}"/>
    </mx:WindowedApplication>
    view/MonComposant.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
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
     
    	<mx:Script>
    		<![CDATA[
    			import model.MonObjet;
    			import __AS3__.vec.Vector;
     
    			[Bindable]
    			public var monVecteur:Vector.<MonObjet>;
    		]]>
    	</mx:Script>
    </mx:VBox>
    model/MonObjet.as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package model
    {
    	public class MonObjet
    	{
    		public function MonObjet()
    		{
    		}
     
    	}
    }
    J'obtiens alors l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    An internal build error has occurred. Right-click for more information
    et voici de que j'ai dans les logs d'éclipse :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    !ENTRY com.adobe.flexbuilder.project 4 43 2010-04-02 09:07:17.726
    !MESSAGE Uncaught exception in compiler
    !STACK 0
    java.lang.NullPointerException
    	at flex2.compiler.mxml.InterfaceCompiler$DependencyAnalyzer$AttributeDependencyScanner.property(InterfaceCompiler.java:1432)
    	at flex2.compiler.mxml.lang.DeclarationHandler.invoke(DeclarationHandler.java:78)
    	at flex2.compiler.mxml.lang.AttributeHandler.invoke(AttributeHandler.java:60)
    	at flex2.compiler.mxml.InterfaceCompiler$DependencyAnalyzer.registerDependencies(InterfaceCompiler.java:1372)
    	at flex2.compiler.mxml.InterfaceCompiler$DependencyAnalyzer.registerDependencies(InterfaceCompiler.java:1342)
    	at flex2.compiler.mxml.InterfaceCompiler$DependencyAnalyzer.analyze(InterfaceCompiler.java:1249)
    	at flex2.compiler.mxml.dom.Node.analyze(Node.java:47)
    	at flex2.compiler.mxml.InterfaceCompiler.postprocess(InterfaceCompiler.java:458)
    	at flex2.compiler.mxml.Compiler.postprocess(Compiler.java:166)
    	at flex2.compiler.API.postprocess(API.java:3584)
    	at flex2.compiler.API.postprocess(API.java:3551)
    	at flex2.compiler.API.batch2(API.java:427)
    	at flex2.compiler.API.batch(API.java:1117)
    	at flex2.compiler.API.compile(API.java:1290)
    	at flex2.tools.oem.Application.compile(Application.java:1074)
    	at flex2.tools.oem.Application.compile(Application.java:800)
    	at flex2.tools.flexbuilder.BuilderApplication.compile(BuilderApplication.java:354)
    	at com.adobe.flexbuilder.multisdk.compiler.internal.ASApplicationBuilder$MyBuilder.mybuild(ASApplicationBuilder.java:271)
    	at com.adobe.flexbuilder.multisdk.compiler.internal.ASApplicationBuilder.build(ASApplicationBuilder.java:122)
    	at com.adobe.flexbuilder.multisdk.compiler.internal.ASBuilder.build(ASBuilder.java:139)
    	at com.adobe.flexbuilder.multisdk.compiler.internal.ASItemBuilder.build(ASItemBuilder.java:73)
    	at com.adobe.flexbuilder.project.compiler.internal.FlexProjectBuilder.buildItem(Unknown Source)
    	at com.adobe.flexbuilder.project.compiler.internal.FlexProjectBuilder.build(Unknown Source)
    	at com.adobe.flexbuilder.project.compiler.internal.FlexIncrementalBuilder.build(Unknown Source)
    	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:624)
    	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
    	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:166)
    	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:197)
    	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:246)
    	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
    	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:249)
    	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:302)
    	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:334)
    	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:137)
    	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:235)
    	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
    Si je change le type de la variable "monVecteur" en autre chose (ArrayCollection par exemple), je n'ai plus cette erreur.

    Ma question est donc la suivante : Est-ce que le data binding est possible sur un vecteur, et si oui comment faire pour ne pas avoir l'erreur ci dessus?
    Dans le cas contraire, j'imagine qu'il faut que je transforme mon Vector en ArrayCollection, mais c'est pas génial...

  2. #2
    Membre régulier Avatar de ouaqa
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 95
    Points : 100
    Points
    100
    Par défaut
    Bonjour toopac,

    Comme tu l'as deviné, à l'heure actuelle le databinding n'est pas possible avec les vectors. Si je ne dis pas de bêtises, c'est aussi impossible avec les arrays.
    Le moins pire est donc de te faire une fonction utilitaire qui passera les valeurs de ton vector dans un arrayCollection.

    Si tu as vraiment besoin de changer ton vector dynamiquement , peut-être que tu peux bricoler quelque chose avec la méthode BindSetters en précisant une fonction qui s'occupera de modifier les valeurs de ton vector par rapport à celles de ton arrayCollection.
    Cependant, je n'ai pas testé cette technique et la documentation adobe semble dire que ça ne marchera pas

  3. #3
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut
    Bonjour ouaqa

    Je m'en doutais un peu... c'est dommage pourtant, je trouve plus facile de travailler avec des vecteurs qu'avec des collections de tableaux.

    Au final je n'utilise pas de vecteur, et me débrouille autrement...

    Si j'ai le temps je jetterai quand même un coup d'œil du côté de la méthode BindingSetter, mais sans grande attente...

    Merci en tout cas d'avoir répondu!

  4. #4
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut
    Petite mise à jour : Il est apparemment possible avec flex 4 de faire du databinding avec des vecteurs.

    En même temps l'intérêt est bien mince : on ne peut utiliser un vecteur comme dataprovider (il n'implémente pas iList).

    Donc toujours aucun moyen de remplacer des ArrayCollection par des collections typées...

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/04/2010, 11h01
  2. Data Binding avec une donnée
    Par vinlap dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 23/05/2009, 13h48
  3. [débutant] Problème de Cast avec des vector
    Par syl55 dans le forum Langage
    Réponses: 9
    Dernier message: 20/05/2009, 10h04
  4. Data bindings avec des pictures box
    Par patoche.05 dans le forum C#
    Réponses: 0
    Dernier message: 20/04/2009, 12h54
  5. Data Binding avec setter et getter possible?
    Par MathG dans le forum Flex
    Réponses: 2
    Dernier message: 15/01/2009, 16h59

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