1

次のように、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>
4

3 に答える 3

4

できますよ。MXMLコンポーネントはクラスであるため、コンポーネントAに基づいてコンポーネントBを作成する場合(BはAから継承します)、BのAのメソッドをオーバーライドできます。

于 2012-04-04T07:20:17.150 に答える
1

スーパークラスを宣言する場所と方法に注意してください。上記の構文から、mxmlクラスで<component>タグを宣言しようとしているようです。この場合、コンパイラはこれを実際の拡張ではなく、個別の子オブジェクトとして扱います。

たとえば、ルートレベルのタグはIDを宣言できません(ただし、コンポーネントは宣言できます。これがクラス名になります)。ほとんどの場合、すべてのxml名前空間を明示的に宣言する必要があります。

真の拡張機能であるためには、最初の<VGroup>クラスにCreateObjectFormSubmitという名前を付ける必要があります。これが、拡張クラスのルートタグになります。ただし、1つの落とし穴があります。ただし、mxmlクラスから拡張する場合、追加の子を宣言することはできません(レイアウト規則のため、mxml表記で)。

クラスのインスタンスを言う場合、<Script>タグの関数スコープはルートレベル内にあるため、それをオーバーライドすることはできません。これは、<component>タグを宣言するときに「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
    }
}
于 2012-04-04T18:17:07.603 に答える
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');
  }
}
于 2012-04-04T07:45:46.987 に答える