【问题标题】:Instantiate an Fxg on runtime using getDefinitionByName in Flex在 Flex 中使用 getDefinitionByName 在运行时实例化一个 Fxg
【发布时间】:2012-06-24 06:27:39
【问题描述】:

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 文档页面。这里是:

Option 包括类 [...]

描述 将一个或多个类链接到生成的应用程序 SWF 文件,无论这些类在编译时是否需要。 要链接整个 SWC 文件而不是单个类,请使用 include-libraries 选项。

好的。在 Flash Builder 中,我转到只有此选项的附加编译器参数

-locale en_US

所以我在下面添加了我的选项

-includes class = assets.Number10

-includes class assets.Number10

-includes class Number10

当应用程序运行时,我收到错误 #2032。

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

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

【问题讨论】:

    标签: actionscript-3 apache-flex


    【解决方案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 对象,那么声明所有类就有点困难和乏味了。 那么,如何一次性声明一个包的所有类?

    【讨论】:

    • @Florian 有正确的答案。使用编译器参数,您可以强制类进入您的最终 SWF。或者,就像您所做的那样,创建一个具有该类名的变量,以便将其编译成代码。
    • 如何在 mxmxl 文档中使用和包含应用程序编译器选项?
    • 您不能在 MXML 文档中包含编译器选项(同时也让编译器知道它们)。在 Flash Builder 中有一个对话框,您可以在其中指定编译器参数。在命令行中,只需将它们指定为任何其他命令行参数。
    • 在“附加编译器参数”区域中,我必须声明包含库 [...] 选项和包目标,但它会导致错误。我如何编译选项?
    • 如果您搜索 Flex 编译器参数,您应该能够找到它的文档。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      确保使用完全限定的类名。

      另外,将 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);
      }
      

      【讨论】:

      • 我已经尝试使用 SpriteVisualElement 和完全限定的类名,但没有改变任何东西。没用!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 2019-05-20
      • 2012-01-14
      • 2020-08-22
      • 1970-01-01
      相关资源
      最近更新 更多