I was thinking about this a bit further, and why I think this behaviour is
odd.

In the example I have, there is a ViewStack inside one of the States.

If you have a ViewStack NOT inside a State, and there are say 5 "views" in
there, and you switch between them the "creationComplete" fires as they
"view" becomes visible. This is what you would expect.

If you take the exact same ViewStack and put it inside a State, when you
change to that State, EVERY view in the ViewStack is completely created, and
"creationComplete" is fired on all the "views", so in effect creationPolicy
is set to "true" wether you like it or not!

There may be some technical reason for this, and there are other ways to
approach the problem I am trying to solve, but all that aside I am surprised
by the way Flex behaves in this situation.
I didn't think I was using States in a way that was to far removed from what
they are intended to do.

Cheers,

David

On 11/19/06, Igor Costa <[EMAIL PROTECTED]> wrote:

  David's you could uses currentStateChanging to do the dispatchEvent.
in the Object you want to do it.


REgards.


On 11/17/06, David Harris < [EMAIL PROTECTED]> wrote:
>
>   Hi Matt,
>
> the problem isn't the ViewStack, but the states.
>
> If you have 2 states, and then you go from one to another, all the
> children are created.
> The situation I found this was where one State was a login and the other
> State the application.
> When logging was a success, the appliction switched to the
> "MainApplication" state, which then created ALL it's children.
> The fact that all the children are created had the same effect as having
> creationPolicy="all" set, which can not be good if application is quite
> complex.
>
> Hope that makes sense.
>
> Regards,
>
> David
>
> On 11/17/06, Matt Chotin < [EMAIL PROTECTED]> wrote:
> >
> >    Yes, this is expected behavior.  Is the problem that you have
> > panels in a ViewStack and you don't want the events for all of those at
> > once?  Maybe you should use the "show" event instead?  That will fire each
> > time the Panel in the stack is shown, so if you plan on going back and forth
> > you may want to keep a flag as to whether you've already executed that call.
> >
> >
> >  ------------------------------
> >
> > *From:* [EMAIL PROTECTED] ups.com [mailto: [EMAIL PROTECTED]
> > *On Behalf Of *David Harris
> > *Sent:* Thursday, November 16, 2006 10:39 AM
> > *To:* [email protected]
> > *Subject:* [flexcoders] Re: States create all their children
> >
> >
> >
> > I guess about now I start logging a bug...
> >
> > Anyone know how to do this?
> >
> > On 11/13/06, David Harris <[EMAIL PROTECTED]<djohnsmarie%40gmail.com>>
> > wrote:
> > > I have a situation where my "states" in my application are very
> > complex.
> > >
> > > Each state has a lot in them, and each view in the state has events
> > of
> > > data retrieval tied to the "creationComplete" event.
> > >
> > > The problem is this:
> > >
> > > If you switch from one state to another, all the children of the new
> > > state are created, so all the "creationComplete" events are fired,
> > and
> > > my server gets alot of hits very quickly, and the app takes a long
> > > time to load.
> > >
> > > Below is are 2 simple examples (I have posted before, so sorry for
> > the
> > > double up...) that show what I mean:
> > >
> > > Baring an typo's, when you run example 1, and you click on the
> > button
> > > to switch states, all the sub panels fire their creationComplete
> > > events, while in the second example, the creationComplete is fired
> > as
> > > the ApplicationControlBar is clicked.
> > >
> > > Is the "expected" (and justified) behaviour of a Flex app, or am I
> > > (yet again) missing the obvious?
> > >
> > > Example 1 (with view states):
> > >
> > > ===================================================================
> > >
> > > <?xml version="1.0" encoding="utf-8"?>
> > > <mx:Application
> > > xmlns:mx="http://www.adobe.com/2006/mxml";
> > > layout="absolute"
> > > currentState="initalizing"
> > > >
> > >
> > > <mx:Script>
> > > <![CDATA[
> > >
> > > public function handleCreationComplete(event:Event):void
> > > {
> > >
> > > trace("This got created : " + event.target);
> > >
> > > }
> > >
> > > ]]>
> > > </mx:Script>
> > >
> > >
> > > <mx:states>
> > > <mx:State name="initalizing">
> > > <mx:AddChild position="lastChild">
> > > <mx:Button click="this.currentState = 'MainApplication'" />
> > > </mx:AddChild>
> > > </mx:State>
> > >
> > > <mx:State name="MainApplication">
> > >
> > > <mx:AddChild position="lastChild">
> > >
> > > <mx:Panel width="400" height="400">
> > >
> > > <mx:ApplicationControlBar width="100%" cornerRadius="6"
> > > shadowDistance="3" paddingLeft="40" >
> > >
> > > <mx:LinkBar dataProvider="myViewstack" disabledColor="#8F8F8F"
> > > color="#000000" separatorWidth="2"/>
> > >
> > > </mx:ApplicationControlBar>
> > >
> > > <mx:ViewStack id="myViewstack" width="100%"
> > > height="100%">
> > >
> > > <mx:Panel creationComplete="handleCreationComplete(event)"
> > > label="one"
> > > width="100%"
> > > height="100%"
> > > />
> > > <mx:Panel creationComplete="handleCreationComplete(event)"
> > > label="two"
> > > width="100%"
> > > height="100%"
> > > />
> > > <mx:Panel creationComplete="handleCreationComplete(event)"
> > > label="three"
> > > width="100%"
> > > height="100%"
> > > />
> > > <mx:Panel creationComplete="handleCreationComplete(event)"
> > > label="four"
> > > width="100%"
> > > height="100%"
> > > />
> > > <mx:Panel creationComplete="handleCreationComplete(event)"
> > > label="five"
> > > width="100%"
> > > height="100%"
> > > />
> > >
> > > </mx:ViewStack>
> > >
> > > </mx:Panel>
> > >
> > > </mx:AddChild>
> > > </mx:State>
> > > </mx:states>
> > > </mx:Application>
> > >
> > >
> > > ===================================================================
> > >
> > > Example 2:
> > >
> > > ==================================================================
> > >
> > > <?xml version="1.0" encoding="utf-8"?>
> > > <mx:Application
> > > xmlns:mx="http://www.adobe.com/2006/mxml";
> > > layout="absolute"
> > >
> > > >
> > >
> > > <mx:Script>
> > > <![CDATA[
> > >
> > > public function handleCreationComplete(event:Event):void
> > > {
> > >
> > > trace("This got created : " + event.target);
> > >
> > > }
> > >
> > > ]]>
> > > </mx:Script>
> > >
> > >
> > > <mx:Panel width="400" height="400">
> > >
> > > <mx:ApplicationControlBar width="100%" cornerRadius="6"
> > > shadowDistance="3" paddingLeft="40" >
> > >
> > > <mx:LinkBar dataProvider="myViewstack" disabledColor="#8F8F8F"
> > > color="#000000" separatorWidth="2"/>
> > >
> > > </mx:ApplicationControlBar>
> > >
> > > <mx:ViewStack id="myViewstack" width="100%"
> > > height="100%">
> > >
> > > <mx:Panel creationComplete="handleCreationComplete(event)"
> > > label="one"
> > > width="100%"
> > > height="100%"
> > > />
> > > <mx:Panel creationComplete="handleCreationComplete(event)"
> > > label="two"
> > > width="100%"
> > > height="100%"
> > > />
> > > <mx:Panel creationComplete="handleCreationComplete(event)"
> > > label="three"
> > > width="100%"
> > > height="100%"
> > > />
> > > <mx:Panel creationComplete="handleCreationComplete(event)"
> > > label="four"
> > > width="100%"
> > > height="100%"
> > > />
> > > <mx:Panel creationComplete="handleCreationComplete(event)"
> > > label="five"
> > > width="100%"
> > > height="100%"
> > > />
> > >
> > > </mx:ViewStack>
> > >
> > > </mx:Panel>
> > >
> > >
> > > </mx:Application>
> > >
> > >
> > > ==================================================================
> > >
> >
> >
>


--
----------------------------
Igor Costa
www.igorcosta.com

Reply via email to