Dynamically Creating Flex Components In ActionScript

Posted by Joshua on Stack Overflow See other posts from Stack Overflow or by Joshua
Published on 2010-06-08T22:56:12Z Indexed on 2010/06/08 23:02 UTC
Read the original article Hit count: 225

Isn't there some way to re-write the following code, such that I don't need a gigantic switch statement with every conceivable type? Also, if I can replace the switch statement with some way to dynamically create new controls, then I can make the code smaller, more direct, and don't have to anticipate the possibility of custom control types.

Before:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" 
  layout="vertical">
  <mx:Script>
    <![CDATA[
      import mx.containers.HBox;
      import mx.controls.Button;
      import mx.controls.Label;
      public function CreateControl(event:Event):void {
        var Type:String=Edit.text;
        var NewControl:Object;

        switch (Type) {
          case 'mx.controls::Label':NewControl=new Label();break;
          case 'mx.controls::Button':NewControl=new Button();break;
          case 'mx.containers::HBox':NewControl=new HBox();break;
          ... every other type, including unforeseeable custom types
        }

        this.addChild(NewControl as DisplayObject);
      }
    ]]>
  </mx:Script>
  <mx:Label text="Control Type"/>
  <mx:TextInput id="Edit"/>
  <mx:Button label="Create" click="CreateControl(event);"/>
</mx:WindowedApplication>

AFTER:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" 
  layout="vertical">
  <mx:Script>
    <![CDATA[
      import mx.containers.HBox;
      import mx.controls.Button;
      import mx.controls.Label;
      public function CreateControl(event:Event):void {
        var Type:String=Edit.text;

        var NewControl:Object= *???*(Type);

        this.addChild(NewControl as DisplayObject);
      }
    ]]>
  </mx:Script>
  <mx:Label text="Control Type"/>
  <mx:TextInput id="Edit"/>
  <mx:Button label="Create" click="CreateControl(event);"/>
</mx:WindowedApplication>

© Stack Overflow or respective owner

Related posts about flex

Related posts about flash