是不是有一些方法來重寫下面的代碼,這樣我就不需要每種可想象的類型都有一個巨大的switch語句了?此外,如果我可以用某種方式替換switch語句來動態創建新控件,那麼我可以使代碼更小,更直接,並且不必預測自定義控件類型的可能性。在ActionScript中動態創建Flex組件
前:
<?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>
線做一些事情看來這是http://stackoverflow.com/questions/3001499/dynamically-的衍生物在投稿中遇到的問題我會在找到你的投稿解決方案時檢查。但是如果你想要更好的代碼可讀性,你很可能必須把switch語句放在別的類中。乾杯:D – phwd 2010-06-09 00:04:56
你也應該看看http://stackoverflow.com/questions/2016201/dynamic-object-initiation-as3 @ krichard的方法可以工作 – phwd 2010-06-09 00:12:45