2009-12-07 33 views
0

這是我第一次來這裏,但我已經在這裏找到了一些很好的答案,所以我想感謝所有人。Flex/AS3:自動實例化一個數組中的包類(插件類)

我正在開發一個小的Flex應用程序,我想將每個類從一個包實例化成一個數組,所以我可以在之後解析它。爲了澄清,我試圖通過舊的canProcess/doProcess例程來緩解我的應用程序的插件管理系統: 我的插件都在一個包中,包括一個抽象插件類。首先,我在這個包中創建每個類的一個實例(這是我需要幫助的地方)並將它們放入一個數組中。然後,每當我需要一個項目的插件時,我使用canProcess方法解析數組中的每個插件類(該項是參數)。如果一個插件表示是,那麼我將該項目發送到doProcess方法並停止解析該數組。

我知道我可以手工實現我包裝中的每個班級,但我寧願不打擾去做。

有沒有人有想法?

Thx

回答

1

AS3反射不允許您列出包中的所有類。您必須將類名寫入服務器上的(xml)文件,加載它,然後使用getDefinitionByName從這些字符串獲取Class對象,然後實例化它們。

考慮示例XML文件:

<root package="boris.ratak"> 
    <className>Plugin1</className> 
    <className>Plugin2</className> 
    <className>Plugin3</className> 
</root> 

負載其與URLLoader並解析它喜歡:

import flash.utils.getDefinitionByName; 

var pack:String = String([email protected]) + "."; 
for each(var cl:String in xml.className) 
{ 
    var name:String = pack + String(cl.text()); 
    var Type:Class = getDefinitionByName(name) as Class; 
    pluginArray.push(new Type()); 
}