flex中getDefinitionByName 函式的使用

meteorlwj發表於2010-05-05

在專案中自定義一個CheckboxGroup,這個控制元件裡面包含多個Checkbox想控制Checkbox的行為:所以使用查詢一下幫助使用flex中經典方法:getDefinitionByName 函式的使用

 

 

public function getDefinitionByName(name:String):Object
返回引數 name 中指定的類引用

引數 name:String - 類名稱
返回 Object - 返回引數 name 中指定的類引用
錯誤 ReferenceError - 找不到引數 name 對應的公共定義

as3中的getDefinitionByName函式是 返回 name 引數指定的類的類物件引用。

這樣就可以使用這個方法根據已知類的路徑的字串來獲取類的類物件引用。這樣就可以利用這個特性讓flash動態建立類的例項...

 

但問題是:

1. 使用getDefinitionByName方法獲得的類必須是在釋出的時候被編譯到swf文中的,否則就會報錯:"ReferenceError: Error #1065: 變數 <類的名字> 未定義。"

2. 由於使用import匯入的類(只是作為查詢類的路徑)並不會在釋出swf的時候被編譯進去(當然flash.*包裡面的類本身就是player中的),只用在程式碼中使用到的類才會被編譯進去...

 

那麼,要使用這個方法來實現動態執行怎麼辦? 只有把可能需要的所有類包含在程式碼中(比如在定義變數的型別聲名時使用 *),並且在開始聲名此類,聲名時可以隨便使用個名字,這樣才能使用getDefinitionByName方法...
實際上getDefinitionByName所獲得的類名就是前面你所做的聲名的名字引用

 

-------------------------------------------------
import com.ooph.parser.*;
//包內有ParserWeb類
var ss:ParserWeb;
//在此處聲名ParserWeb類,名為ss(名字不用與下面例項名的相同)
var sortStr:String="Web";
var P:Class = getDefinitionByName("com.ooph.parser.Parser"+sortStr) as Class;
//注意這裡要寫完整的類路徑 "com.ooph.parser.Parser"+sortStr
var newParser:* = new P();

 

 

 

 

 

getDefinitionByName(name) 返回 name 引數指定的類的類物件引用。
經過測試只能獲取內建的類,不能獲取自定類,怎麼解決呀??

其實最終問題是,知道類名,但是為字串,如何獲取它?因為數量不定放在XML中配置的。

 

因為內建類庫肯定會被編譯到swf裡,這樣反射就能拿到。而自定義的類,如果整個工程裡都沒有用到,即使import也不會被編譯(不然swf裡的垃圾成分太多)。我建議可以把需要反射的類庫生成一個swf去載入,或者在工程的什麼地方引用一下。

 

 

 

getDefinitionByName () 函式  
public function getDefinitionByName(name:String):Object

 

語言版本 :  ActionScript 3.0
RuntimeVersions:  AIR 1.0, Flash Player 9

 

 

返回 name 引數指定的類的類物件引用。

引數

  name:String — 類的名稱。

 

返回
  Object — 返回 name 引數指定的類的類物件引用。

引發
  ReferenceError — 不存在具有指定名稱的公共定義。
本文轉自:http://topmanopensource.javaeye.com/blog/437508

相關文章