【问题标题】:How to read the value of a text input in a Flash SWF from a Flex App?如何从 Flex 应用程序读取 Flash SWF 中文本输入的值?
【发布时间】:2010-09-10 22:04:12
【问题描述】:
我有一个 Flex 应用程序,它从 CS3 加载 SWF。加载的 SWF 包含一个名为“myText”的文本输入。我可以在 SWFLoader.content 中毫无问题地看到这一点,但我不知道我应该在我的 Flex 应用程序中将它视为什么类型。我以为 flex 文档涵盖了这一点,但我只能找到如何与另一个 Flex SWF 交互。
Flex 调试器告诉我它是 fl.controls.TextInput 类型,这是有道理的。但是 FlexBuilder 似乎不知道这个类。虽然 Flash 和 Flex 都使用 AS3,但 Flex 有一个全新的 GUI 类库。我以为它也有所有的 Flash 类,但我无法让它知道任何 fl.*** 包。
【问题讨论】:
标签:
apache-flex
flash
actionscript-3
cs3
【解决方案1】:
fl.* 类层次结构仅适用于 Flash CS3。它是 Flash Components 3 库(我相信它被称为,我可能错了)。但是,您不需要该类来处理该对象。只要您可以在您的代码中获得对它的引用(您似乎拥有),您就可以将引用分配给无类型变量并使用它:
var textInput : * = getTheTextInput(); // insert your own method here
textInput.text = "Lorem ipsum dolor sit amet";
textInput.setSelection(4, 15);
无需知道对象的类型即可与之交互。当然你会在编译时丢失类型检查,但这真的不是什么大问题,你只需要格外小心。
如果你真的,真的想引用对象作为它的真实类型,有问题的类位于
Adobe Flash CS3/Configuration/Component Source/ActionScript 3.0/User Interface/fl/controls/TextInput.as
...如果您安装了 Flash CS3,因为它仅随该应用程序提供。
【解决方案2】:
Flex 和 Flash SWF 本质上是相同的,只是使用不同的工具构建。我不确定它们是否共享相同的组件库,但根据包名,我猜它们至少大部分是这样的。
如果它是一个普通的文本输入,那么我猜它是 mx.controls.TextInput 的一个实例。
【解决方案3】:
请记住,如果您按照 Theo 所说的操作并使用正确的类型引用它,它将在两个 swf 中编译该类,即使您没有在第一个中使用它。不幸的是,fl.* 类没有实现任何接口,因此您不能将它们键入接口而不是实现。如果可以的话,只会编译接口,这比实现要小得多。对于这个来说,这没什么大不了的,它可能只会增加几个 kb,但从长远来看,它会增加。只是提个醒;)