如何从Flex App读取Flash SWF中输入的文本的值?
我有一个Flex应用程序,可以从CS3加载SWF。加载的SWF包含一个名为" myText"的文本输入。我可以在SWFLoader.content中毫无问题地看到它,但是我不知道在Flex App中应该将其视为哪种类型。我以为flex文档涵盖了这一点,但是我只能找到如何与另一个Flex SWF进行交互。
Flex调试器告诉我它是fl.controls.TextInput类型,这很有意义。但是FlexBuilder似乎并不了解此类。 Flash和Flex都使用AS3,而Flex具有一个全新的GUI类库。我以为它也具有所有Flash类,但我无法了解任何fl。***软件包。
解决方案
Flex和Flash SWF本质上是相同的,只是使用不同的工具构建而成。我不确定它们是否共享相同的组件库,但是基于包名,我猜测它们至少在大多数情况下都可以。
如果它是普通的文本输入,那么我猜它是mx.controls.TextInput的一个实例。
类的" 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,因为它仅随该应用程序一起提供。
请记住,如果按照Theo的说明进行操作并以正确的类型引用它,即使我们在第一个swfs中没有使用它,它也会在两个swfs中编译该类。不幸的是fl。*类没有实现任何接口,因此我们不能在实现中将它们键入接口。如果可以,将仅编译接口,该接口比实现小得多。对于这个而言,这没什么大不了的,它可能只会添加几个kb,但从长远来看,它会加起来。只是抬头;)