1

我对 getDefinitionByName 有一点问题。我的目的是在运行时在文档 mxml 中实例化一个 FXG 对象(Number10.fxg)。类的名称位于字符串变量中,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 ten: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。

我认为选项声明是错误的。对于使用选项,我没有很好的参考。所以……帮帮我!

如何使用包含类选项将 Number10 类或资产包与其他 fxg 对象一起声明?

4

3 回答 3

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 对象,那么声明所有类就有点困难和乏味了。那么,我怎样才能一次性声明一个包的所有类呢?

于 2012-06-22T11:55:58.923 回答
1

您可以使用 include 和 includeClasses 编译器选项将类添加到 SWC 和 SWF。使用这些,您不必引用代码中的类。请参阅文档以了解正确使用方法。

于 2012-06-22T12:04:08.747 回答
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);
}
于 2012-06-22T01:36:31.777 回答