[flexcoders] Selecting which Child Components to add at runtime

2007-06-04 Thread phall121
I want to add views to a ViewStack at runtime by selecting from an 
expanding table of Custom Components.

As the simplified code below shows, I can figure out how to add any 
one and hard code it.  But the addChild method of the ViewStack 
seems to require that you know ahead of time which component you 
want to add.  I can not find in the docs or online a way to make 
this dynamic.

In other words, when I define the new component view to add to the 
view stack 
{
var canCustView:Comp1 = new Comp1();
canCustView.label = Custom  + cbCompList.selectedItem.label;
vsComps.addChild(canCustView);
}
...I want to choose at runtime whether to instantiate views from 
Comp1, Comp17, or Comp53, etc.

Any ideas how to accomplish this?  Thanks for your thoughts!

Here is the simplified code.  


mx:Application xmlns:mx=http://www.adobe.com/2006/mxml; 
layout=absolute
xmlns:comp=components.*

mx:Script
![CDATA[
import components.*;

private function fAddView():void
{
  var canHardView:TestComp = new TestComp();
  canHardView.label = Hard-Code View2;
  vsComps.addChild(canHardView);
}

private function fAddCustomView():void
{
   var canCustView:Comp1 = new Comp1();
   canCustView.label = Custom  + 
cbCompList.selectedItem.label;
   vsComps.addChild(canCustView);
}

]]
/mx:Script

mx:Button x=25 y=36 label=Add Hard-Coded View
click=fAddView()/

mx:Button x=25 y=68 label=Add Custom Component
click=fAddCustomView()/

mx:ComboBox id=cbCompList x=203 y=67
  mx:dataProvider
mx:Array id=arrCompList
  mx:Object label=Component1 data=Comp1/
  mx:Object label=Component2 data=Comp2/
  mx:Object label=Component3 data=Comp3/
  mx:Object label=Component4 data=Comp4/
  mx:Object label=Component5 data=Comp5/
/mx:Array
  /mx:dataProvider
/mx:ComboBox

mx:TabBar direction=vertical dataProvider={vsComps} 
labelField=app y=108 x=27/

mx:ViewStack id=vsComps width=50% height=50%
x=200 y=108 backgroundColor=#C9

   mx:Canvas id=vView1 label=View1 verticalScrollPolicy=off
horizontalScrollPolicy=off
mx:Label x=68 y=2 width=130 text=Initial View -- 
View 1/
mx:Label id=lblViewName x=68 y=32 width=68 
text=Input:/
mx:TextInput id=txtiInput x=136 y=32/
   /mx:Canvas
/mx:ViewStack

/mx:Application






RE: [flexcoders] Selecting which Child Components to add at runtime

2007-06-04 Thread Alex Harui
Are you asking about:

 

private function fAddCustomView(compClass:Class):void
{
var canCustView:Container = Container(new compClass());
canCustView.label = Custom  + 
cbCompList.selectedItem.label;
vsComps.addChild(canCustView);
}



...

fAddCustomView(Comp1);

 

 



From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of phall121
Sent: Monday, June 04, 2007 12:39 PM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] Selecting which Child Components to add at runtime

 

I want to add views to a ViewStack at runtime by selecting from an 
expanding table of Custom Components.

As the simplified code below shows, I can figure out how to add any 
one and hard code it. But the addChild method of the ViewStack 
seems to require that you know ahead of time which component you 
want to add. I can not find in the docs or online a way to make 
this dynamic.

In other words, when I define the new component view to add to the 
view stack 
{
var canCustView:Comp1 = new Comp1();
canCustView.label = Custom  + cbCompList.selectedItem.label;
vsComps.addChild(canCustView);
}
...I want to choose at runtime whether to instantiate views from 
Comp1, Comp17, or Comp53, etc.

Any ideas how to accomplish this? Thanks for your thoughts!

Here is the simplified code. 

mx:Application xmlns:mx=http://www.adobe.com/2006/mxml
http://www.adobe.com/2006/mxml  
layout=absolute
xmlns:comp=components.*

mx:Script
![CDATA[
import components.*;

private function fAddView():void
{
var canHardView:TestComp = new TestComp();
canHardView.label = Hard-Code View2;
vsComps.addChild(canHardView);
}

private function fAddCustomView():void
{
var canCustView:Comp1 = new Comp1();
canCustView.label = Custom  + 
cbCompList.selectedItem.label;
vsComps.addChild(canCustView);
}

]]
/mx:Script

mx:Button x=25 y=36 label=Add Hard-Coded View
click=fAddView()/

mx:Button x=25 y=68 label=Add Custom Component
click=fAddCustomView()/

mx:ComboBox id=cbCompList x=203 y=67
mx:dataProvider
mx:Array id=arrCompList
mx:Object label=Component1 data=Comp1/
mx:Object label=Component2 data=Comp2/
mx:Object label=Component3 data=Comp3/
mx:Object label=Component4 data=Comp4/
mx:Object label=Component5 data=Comp5/
/mx:Array
/mx:dataProvider
/mx:ComboBox

mx:TabBar direction=vertical dataProvider={vsComps} 
labelField=app y=108 x=27/

mx:ViewStack id=vsComps width=50% height=50%
x=200 y=108 backgroundColor=#C9

mx:Canvas id=vView1 label=View1 verticalScrollPolicy=off
horizontalScrollPolicy=off
mx:Label x=68 y=2 width=130 text=Initial View -- 
View 1/
mx:Label id=lblViewName x=68 y=32 width=68 
text=Input:/
mx:TextInput id=txtiInput x=136 y=32/
/mx:Canvas
/mx:ViewStack

/mx:Application