在flex中访问自定义组件文件中的对象

时间:2011-09-18 12:12:13

标签: flex actionscript flex4 mxml

我很擅长flex,特别是对于mxml部分。对我来说有些令人困惑的事情 例如,我有自定义组件文件Abc.mxml,代码为:

<s:Group>
   //Lots of code
   <s:Button id="someId" /*code*/ />
</s:Group>

然后我有Xyz.mxml,它也是自定义组件文件。

<s:Group>
  <fx:Scrip>
     //something happens here, for example some other button click or whatever
  </fx:Script>
  //code
  <comp:Abc />
</s:Group> 

所以问题是如何访问该按钮的属性。我想在Xyz文件中发生某些事情时,按钮的(someId)可见性变为false。如果Abc.mxml是AS类文件那么它会很简单,只需要制作对象等,但是如果它是mxml文件怎么办,我不知道。

1 个答案:

答案 0 :(得分:1)

mxml与as之间没有太大区别。当你写Xyz.mxml:

<s:Group>
  <fx:Scrip>
     //something happens here, for example some other button click or whatever
  </fx:Script>
  //code
  <comp:Abc />
</s:Group>

...您只需指定派生自Group的类Xyz。 Mxml - 只是标记语言,使构建界面更容易。在编译期间,mxml文件被转换为纯AS,因此没有(大规模)你可以在mxml中做,你不能在AS中,反之亦然。

mxml中的ID属性类似于AS中的实例名称,即它将在您的calss中转换为公共属性。

回答您的问题。

您可以在Abc中编写公共函数并在Xyz中调用它。

Abc.mxml:

<s:Group>
    <fx:Script>
        <![CDATA[
            public function doSomething():void
            {
                someId.enabled = false;
            }
        ]]>
    </fx:Script>
   <s:Button id="someId"/>
</s:Group>

Xyz.mxml:

<s:Group>
  <fx:Script>
      <![CDATA[
         private function somethingHappened():void
         {
             abcComponent.doSomething();
         }
      ]]>
  </fx:Script>
  //code
  <comp:Abc id="abcComponent"/>
</s:Group>

somethingHappened函数中,您可以直接访问Button abcComponent.someId,但我强烈建议不要这样做,因为它会破坏封装并使您的类更具凝聚力(等等)。