【问题标题】:getDefinitionByName("mx.containers.TabNavigator"); does not workgetDefinitionByName("mx.containers.TabNavigator");不工作
【发布时间】:2013-07-24 13:24:15
【问题描述】:

当我尝试使用 getDefinitionByName() 获取 flex 类(任何 UIComponent)时,它告诉我该类未定义(并且我使用完整路径),但如果我尝试使用完整路径,然后它可以工作。 顺便说一句,我的项目正在引用另一个项目。

【问题讨论】:

  • 这是一个运行时问题,对吧?你能提供一些示例代码吗?你确定你试图访问的类是在最终的 SWF 中编译的吗?如果没有使用;它可能没有优化出来。如果您使用 RSL;那么我不清楚您是否可以使用 getDefinitionByName() 方法从 RSL 访问类。

标签: actionscript-3 apache-flex


【解决方案1】:

把它放在你的代码中的某个地方:

var dummy:Array=[mx.containers.TabNavigator];

然后再试一次。 Flash 编译器存在一个已知问题,即如果不在任何地方使用,它就不会使用类的类定义。这将强制编译器在 SWF 中包含mx.containers.TabNavigator 定义,以便getDefinitionByName() 可以访问它。

【讨论】:

  • 嗯,其实,我希望能找到一种不声明虚拟变量的方法,如果我找不到其他方法,我会接受你的回答
  • 如果您有任何Class 类型的变量,请在为其分配实际值之前为其写入一个mx.containers.TabNavigator 赋值。事实上,任何明确提及类的 FQN 都会强制编译器将其描述包含在 SWF 中。这就是我说“任何地方”的原因——它可以是一个函数局部变量,并且仍然可以工作。
  • 所以我可以创建一个函数来执行那些虚拟声明,但我不必实际调用该函数,它会工作,对吗?当然我的意思是在文件中声明该函数我想在其中使用 getDeclarationByName
  • 我想是的,我从未听说过 Flash 编译器通过删除未引用的函数来优化类定义。请检查是否是这样。我没有使用这个技巧,我以正常方式使用了一个 dummy var,但我有 100 个课程可以通过 getDefinitionByName()
  • 只是为了澄清:这绝对不是问题,但可以按预期工作。默认情况下,编译器只编译源代码中引用的类。否则编译器将需要添加它有权访问的所有类;它会让你的 swfs 变得庞大。但是,您也可以告诉编译器使用 includes compiler option 显式包含特定类,即您没有创建虚拟声明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多