覆盖mxml组件脚本块中定义的函数实例的函数

时间:2012-04-04 03:34:44

标签: flex actionscript

我在mxml中定义的组件的脚本块中定义了受保护的函数,如下所示:

<s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="onCreationComplete()">
    <fx:Script>
    <![CDATA[
    protected function onCreationComplete():void {

    }
    ...

是否可以覆盖组件实例中的函数,如下所示:

<gen:CreateObjectFormSubmit id="formSubmit">
     <fx:Script>
     <![CDATA[
          override protected function onCreationComplete():void {
              form=form1;
          }
     ]]>
     </fx:Script>

3 个答案:

答案 0 :(得分:4)

当然,你可以。 MXML组件是一个类,因此如果您基于组件A创建组件B(B继承自A),那么您可以覆盖B中的A方法。

答案 1 :(得分:1)

要覆盖任何函数,您想要覆盖的函数应该在当前类的父类中可用。

public class A {
  public function methodtooverride():void{
    trace('in class A');
  }
}

public class B extends A {
  override public function methodtooverride():void{
    trace('in class B');
  }
}

答案 2 :(得分:1)

请注意你在哪里以及如何宣布你的超级班级。从上面提供的语法看,您可能正在尝试声明&lt; component&gt; mxml类中的标记,如果是这种情况,编译器会将其视为单独的子对象,而不是实际的扩展。

首先,根级别标签不能声明一个id(但组件可以 - 这就成了类名),你很可能需要显式声明所有的xml名称空间。

为了使其成为真正的扩展,您的第一个&lt; VGroup&gt;类需要命名为CreateObjectFormSubmit,这将成为扩展类的根标记。但是有一个问题,如果你从mxml类扩展,你不能声明任何额外的子代(由于布局规则,以mxml表示法)。

如果你说的是你的类的实例,那么你就不能覆盖它,因为&lt; Script&gt;的函数范围。标记仍然位于根级别。当声明&lt; component&gt;时,这有时也被称为'outerDocument'。标签

上述在常规AS中执行此操作与以下内容不同:

class SomethingCool extends UIComponent {
    ...
    public function addButtons():void
    {
         var btn:Button = new Button();
             btn.id = 'formSubmit';
             //can't declare an override of Button here
    }
}