使用Flex中的getDefinitionByName在运行时实例化Fxg

时间:2012-06-21 22:57:46

标签: actionscript-3 flex

我对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包?

3 个答案:

答案 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);
}