[轉]關於getDefinitionByName的一個奇怪現象

http://bbs.9ria.com/viewthread.php?tid=89712&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000
 
 
假如M1是我的在flex中導入的一個SWC。
我這樣用它當然是沒有問題
  1. var m1:M1 = new M1();
複製代碼
但是現在我想做一些別的事情。
  1. var A:Class = getDefinitionByName("M1") as Class;
複製代碼
問題出來了,flash報錯了!!
ReferenceError: Error #1065: 變量 M1 未定義。
好吧。我不知道怎麼處理它,但是我沒有停止嘗試。
我嘗試過這樣
  1. trace(getDefinitionByName(getQualifiedClassName(M1)));
複製代碼
返回的是 [object M1]
看樣子我成功了,可是爲什麼呢?
繼續探索
  1. getQualifiedClassName(M1);
  2.                         trace(getDefinitionByName("M1"));
複製代碼
返回[object M1]
看到什麼了嗎?只要在我getDefinitionByName之前,調用一次getQualifiedClassName,不管這個getQualifiedClassName寫在什麼位置,就沒有報錯了。
真是百思不得其解,望有人能指點迷津

最佳答案 binghe
swc中沒有使用過的類和對象都不會被編譯到swf中,所以你直接用getDefinitionByName()獲取的時候,會報引用錯誤,因爲根本就沒這個類。解決辦法:在某個空白地方寫一下M1,讓IDE編譯的時候,知道應該把swc中的M1對象編譯進去。這時你在其他地方用getDefinitionByName()就行了
 
 
 
 
 
swc中沒有使用過的類和對象都不會被編譯到swf中,所以你直接用getDefinitionByName()獲取的時候,會報引用錯誤,因爲根本就沒這個類。解決辦法:在某個空白地方寫一下M1,讓IDE編譯的時候,知道應該把swc中的M1對象編譯進去。這時你在其他地方用getDefinitionByName()就行了
 
 
 
 
 
 
 
swc中沒有使用過的類和對象都不會被編譯到swf中,所以你直接用getDefinitionByName()獲取的時候,會報引用 ...
binghe 發表於 2011-8-9 11:41 

是這個原因,更好的做法是冬天修改編譯參數
做一個xx-config.xml的文件放在工程下,裏面內容如下
  1. <flex-config>
  2.    <includes>
  3.        <symbol>com.greencloud.view.ListGuest</symbol>
  4.               <symbol>com.greencloud.view.FindGuest</symbol>
  5.                <symbol>com.greencloud.view.CodeHelpDemo</symbol>        
  6.    </includes>
  7. </flex-config>
複製代碼
symbol 標籤就是你要引用的mc吃的鏈接全名,
在flex編譯參數里加 load-config+=xx-config.xml;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章