[英]Dynamically Creating Flex Components In ActionScript
是否没有办法重写下面的代码,这样我就不需要每种可能的类型都需要一个巨大的switch语句? 另外,如果我可以用某种方式替换switch语句来动态创建新控件,那么我可以使代码更小,更直接,并且不必预期自定义控件类型的可能性。
之前:
<?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>
后:
<?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>
看一下flash.utils.getDefinitionByName()。
我没有运行此代码,但您应该能够按照以下步骤进行操作
public function CreateControl(event:Event):void {
var Type:String=Edit.text;
var controlClass:Class = getDefinitionByName(Type) as Class;
var NewControl:Object= new controlClass();
this.addChild(NewControl as DisplayObject);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.