我对getDefinitionByName有一点问题。 我的目的是在运行时在文档mxml中实例化FXG对象(Number10.fxg)。 Class的名称位于getDefinitionByName使用的字符串变量中 返回要枚举的类的名称。即使不发送错误消息,代码也不起作用。代码如下:
import assets.Number10;
import flash.utils.getDefinitionByName;
import mx.core.IVisualElement;
private function onClick(event:MouseEvent):void
{
var value:String = "Number10";
var ClassDefinition:Class = getDefinitionByName(value) as Class;
var ten:IVisualElement = new ClassDefinition() as IVisualElement;
this.contentGroup.addElement(ten);
}
我也试过...... var 10:IVisualElement = new ClassDefinition(); 但没什么。它不起作用! 拜托,帮助我!
首先,我参考了关于这个主题的adobe文档页面,所以电报。这是:
选项包括类[...]
描述将一个或多个类链接到生成的应用程序SWF文件,无论这些类是否在编译时都是必需的。 要链接整个SWC文件而不是单个类,请使用include-libraries选项。
确定。在Flash Builder中,我转到附加编译器参数,其中只有此选项
-locale en_US
所以我在这个
下添加我的选项-includes class = assets.Number10
或
-includes class assets.Number10
或
-includes class Number10
当应用程序运行时,我得到错误#2032。
我认为选项声明是错误的。我没有使用选项的好参考。 所以......救救我!
如何使用includes class选项向其他fxg对象声明Number10类或assets包?
答案 0 :(得分:1)
确定!我找到了解决方案...... 是在代码中的某处放置对Number10类的引用,例如:
import assets.Number10;
import flash.utils.getDefinitionByName;
import spark.core.SpriteVisualElement;
//case1
var myNumber:Number10;
//or
//case2
Number10;
private function onClick(event:MouseEvent):void
{
var value:String = "assets.Number10";
var ClassDefinition:Class = getDefinitionByName(value) as Class;
var ten:SpriteVisualElement = new ClassDefinition() as SpriteVisualElement;
this.contentGroup.addElement(ten);
}
并且代码有效: - )
这是Flex编译其代码的方式所带来的问题。 Flex编译它的代码,这样如果没有使用类,它将使该类脱离最终编译的程序。 但问题还没有结束!如果我有数百个可以实例化的Fxg对象,那么声明所有类都有点困难和乏味。 那么,我怎样才能一次性将所有类别的包裹都包括在内?
答案 1 :(得分:1)
您可以使用include和includeClasses编译器选项向SWC和SWF添加类。使用这些,您不必在代码中引用类。请参阅文档以了解正确用法。
答案 2 :(得分:0)
请务必使用完全合格的班级名称。
此外,将FXG类作为IVisualElement投射的方法对我来说是新的。我认为你必须在铸造和排序中使用真正的类。尝试使用SpriteVisualElement。
private function onClick(event:MouseEvent):void
{
var value:String = "assets.Number10";
var ClassDefinition:Class = getDefinitionByName(value) as Class;
var ten:IVisualElement = new ClassDefinition() as SpriteVisualElement.;
this.contentGroup.addElement(ten);
}