Flex - 如何访问MXML中另一个组件内的组件?

时间:2009-09-03 14:28:23

标签: flex actionscript-3 actionscript

我有两个组成部分。一个叫做“InsideComp”,一个叫做“OutsideComp”。 OutsideComp将InsideComp作为其组件的一部分,在我的主MXML文件中,我嵌入了一个OutsideComp实例。如何在主MXML文件中访问InsideComp的公共变量?

在Actionscript中,我可以做类似的事情: OutsideComp.InsideComp.valToChange = 5;

但我不知道如何在MXML中执行此操作。我知道这可能是一个简单的问题。

3 个答案:

答案 0 :(得分:4)

通过设置MXML组件的 id 属性,您可以有效地使其成为可通过点符号访问的公共属性。 “通过MXML访问它”是一个棘手的问题。您可以在xml标记中使用绑定表示法并将该属性绑定到另一个属性,或者您可以以正常的AS3方式在脚本块中访问它。

答案 1 :(得分:2)

我在这里更新代码以包含对外部类的引用。我不是100%肯定这是你正在寻找的,但我会尽我所能给你一个

在OuterClass:

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*">
    <local:InnerClass id="inner" width="100%" height="100%" />
</mx:VBox>

将InnerClass:

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:CheckBox id="innerCheckbox" selected="true" />
</mx:VBox>

编辑:这是应用程序的更新版本

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="horizontal" xmlns:local="*">

    <mx:Binding source="{outer.inner.innerCheckbox.selected.toString()}"
                destination="checkLabel.text" />
    <mx:Label id="checkLabel" />
    <local:OuterClass id="outer" width="100%" height="100%" />
</mx:Application>

以下是对此的简要说明:

  1. 有3个MXML文件:

    • OuterClass:包含InnerClass
    • 的MXML文件
    • InnerClass:包含复选框
    • 的MXML文件
    • 应用程序:包含OuterClass的主应用程序
  2. 主应用程序中有一个绑定,它接受复选框值(通过对象层次结构)并适当地设置Label的文本字段。这就像ActionScript一样:用。运算符来访问嵌套对象。

  3. 当复选框更新时,Label的值会相应更新。

  4. 希望这会让事情变得更加清晰。

答案 2 :(得分:0)

我认为最直接的方法是使用脚本标记。这将允许您运行您熟悉的AS。首先,您需要为要编辑的每个属性分配ID。

<mx:Script>
   private function onCreationComplete (event:Event):void {
     idOfTheOutsideComp.idOfTheInsideComp.propertyName = newValue;
   }
</mx:Script>

我把这段代码放在一个创建完整处理程序中,因为你不能简单地从Script标签中运行代码,它需要在一个函数中运行。