[转]关于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;

你可能感兴趣的:(name)