UPDATED -- I needed to create a reference resolver as well...
Hi again,
I've been playing around with my little Vector problem a bit more and I think I have come to a, probably partial, solution.
Turns out that this works fine:
var className:String = "__AS3__.vec.Vector.<String>";
var cls:Class = getDefinitionByName(className) as Class;
var result:* = new cls();
result.push('string1');
result.push('string2');
result.push('string3');
So, given this, its possible to get a configuration like this working:
or, if you want to add object instances that are being created by the container:Code:<object id="test" class="Object" singleton="false"> <property name="vectorprop"> <vector type="String"> <value>string1</value> <value>string2</value> <value>string3</value> <value>string4</value> </vector> </property> </object>
What I needed to do was create a new NodeParser and add an instance of this to the FlexXMLApplicationContext's parser.Code:<object id="test" class="Object" singleton="false"> <property name="vectorprop"> <vector type="com.myclasses.customtype"> <ref>ref1</ref> <ref>ref2</ref> </vector> </property> </object> <object id="ref1" class="com.myclasses.customtype" /> <object id="ref2" class="com.myclasses.customtype" />
Too bad the parser in FlexXMLApplicationContext is protected, so I had to subclass it and add my NodeParser in its constructor. For the time being I've named my subclass Flex4XMLApplicationContext, which isn't completely appropriate, but bear with me...
(Note to Christophe, perhaps the parser member should be made public? I don't know what the implications of this would be, but its just a suggestion...)
UPDATE
Alright, so a node parser wasn't enough. I also needed to create a custom referenceresolver to handle the actual creation of the property. The canResolve method seems a bit hacky in my implementation, but I don't know any other way to determine if the property is an arbitrary vector or not. Any suggestions are welcome.
By the way, the new reference resolver gets added in the Flex4XMLApplicationContext constructor as well.
UPDATE
I have attached my nodeparser and referenceresolver classes and the FlexXMLApplicationContext subclass, so anyone who is interested in this can play around with it.
These are just my preliminary findings, but I'm fairly confident this approach works for most use cases.
P.S.
Just for completist's sake, I've also added an enhanced prana-objects-0.7.xsd that adds definitions for the vector element.
cheers and a happy new year to everyone,
Roland


Reply With Quote