>> nice... is vector do-able in cs3 - because I am egtting an error on
that...

No - Vector is only Flash player 10.  But with some tweaks, you can use
Array instead.


Jason Merrill 

Bank of  America  Global Learning 
Learning & Performance Solutions

Join the Bank of America Flash Platform Community  and visit our
Instructional Technology Design Blog
(note: these are for Bank of America employees only)






-----Original Message-----
From: flashcoders-boun...@chattyfig.figleaf.com
[mailto:flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of Lehr,
Theodore
Sent: Monday, March 22, 2010 3:40 PM
To: Flash Coders List
Subject: RE: [Flashcoders] xml: counting parents

nice... is vector do-able in cs3 - because I am egtting an error on
that...

________________________________________
From: flashcoders-boun...@chattyfig.figleaf.com
[flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of Steven Sacks
[flash...@stevensacks.net]
Sent: Monday, March 22, 2010 3:19 PM
To: Flash Coders List
Subject: Re: [Flashcoders] xml: counting parents

I disagree with using explicit node names.  He's building an org chart
of
people, so the nodes should be person and the title should be an
attribute.

<people>
     <person title="CEO" name="Bill Gates">
        <person title="President" name="Steve Ballmer"/>
        <person title="Manager - North America" name="Joe Schmoe">
            <person title="Manager - Pacific Northwest" name="Bob
Jones"/>
        </person>
     </person>
</people>


You create a Person VO that you pass the node for deserialization:

public class Person
{
     public var title:String;
     public var name:String;
     public var subordinates:Vector.<Person>;

     public function Person(value:XML)
     {
         deserialize(value);
     }
     private function deserialize(value:XML):void
     {
         title = val...@title;
        name = val...@name;
        subordinates = parseSubordinates(value.person);
     }
     private function parseSubordinates(value:XMLList):Vector.<Person>
     {
        var vector:Vector.<Person> = new Vector.<Person>();
        var len:int = value.length();
        for (var i:int = 0; i < len; ++i)
        {
            vector.push(new Person(value[i]));
        }
        return vector;
     }
}

And you feed that to your view which traverses the stack:

public class PersonView extends Sprite
{
     protected var _data:Person;

     public function PersonView()
     {
         super();
     }
     public function set data(value:Person):void
     {
         _data = value;
         draw();
     }
     public function get data():Person
     {
         return _data;
     }
     protected function draw():void
     {
         // draw based on the data
     }
}


Pseudo-code but you get the idea.  The PersonView would create other
PersonViews
inside of itself to draw the subordinates, and each view would be
responsible
for doing its own layout in the draw function, taking into account the
width/height of its children, etc.  Pretty clean overall.

The reason draw() is protected is because you might want to create
concrete
implementations of PersonView.  Perhaps some titles use a specific view
and you
don't want to clutter PersonView with too many if then else statements,
so you
just instantiate a specific ConcretePersonView based on the _data.title
and the
concrete views take care of drawing themselves.

That's how I would build it, at least.
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to