Apache flex 重写mxml组件脚本块中定义的函数实例的函数

Apache flex 重写mxml组件脚本块中定义的函数实例的函数,apache-flex,actionscript,Apache 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>

我在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>


当然可以。MXML组件是一个类,所以如果您基于组件a创建组件B(B从a继承),那么您可以在B中重写a的方法。

当然可以。MXML组件是一个类,所以如果您基于组件a创建组件B(B从a继承),那么您可以在B中重写a的方法。

要重写任何函数,您要重写的函数应该在您当前类的父类中可用

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');
  }
}

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

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');
  }
}

只是要注意在哪里以及如何声明超级类。根据上面提供的语法,您可能试图在mxml类中声明一个标记,如果是这种情况,编译器会将其视为单独的子对象,而不是实际的扩展

首先,根级别的标记不能声明id(但组件可以声明id,这将成为类名),您很可能需要显式声明所有xml名称空间

为了使其成为真正的扩展,您的第一个类需要命名为CreateObjectFormSubmit,这将成为扩展类的根标记。不过,有一个问题是,如果从mxml类进行扩展,则不能声明任何其他子类(由于布局规则,使用mxml表示法)

如果像您所说的那样是类的一个实例,那么不,您将无法重写它,因为标记的函数范围仍然位于根级别。在声明标记时,有时也称为“outerDocument”

上述情况与常规操作没有任何区别,如下所示:

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

只是要注意在哪里以及如何声明超级类。根据上面提供的语法,您可能试图在mxml类中声明一个标记,如果是这种情况,编译器会将其视为单独的子对象,而不是实际的扩展

首先,根级别的标记不能声明id(但组件可以声明id,这将成为类名),您很可能需要显式声明所有xml名称空间

为了使其成为真正的扩展,您的第一个类需要命名为CreateObjectFormSubmit,这将成为扩展类的根标记。不过,有一个问题是,如果从mxml类进行扩展,则不能声明任何其他子类(由于布局规则,使用mxml表示法)

如果像您所说的那样是类的一个实例,那么不,您将无法重写它,因为标记的函数范围仍然位于根级别。在声明标记时,有时也称为“outerDocument”

上述情况与常规操作没有任何区别,如下所示:

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

你的样品应该很好用!有什么问题吗?你的样品应该很好用!问题是什么?这就是我这个问题的意思,我不知道为什么我认为Flex中会有匿名类扩展。这就是我这个问题的意思,我不知道为什么我认为Flex中会有匿名类扩展。