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 :
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 :
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 :
1 2 3 4 5 6 7 8 9 10
| package model
{
public class MonObjet
{
public function MonObjet()
{
}
}
} |
J'obtiens alors l'erreur suivante :
An internal build error has occurred. Right-click for more information
et voici de que j'ai dans les logs d'éclipse :
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...
Partager