2

Flexでは、スーパークラスがあるとしましょう...次のようなものです:

class SuperComponent extends DragStack {

   private var _childReference:UIComponent;

   public function SuperComponent() {
      // ???
      addEventListener(FlexEvent.CREATION_COMPLETE, onCreationComplete);
   }

   private function onCreationComplete(e:FlexEvent):void {
      //The 'this[]' technique doesn't seem to work and causes run-time errors:
      //trace("Component found: " + this["myButton"]);
   }
}

次に、アプリケーションで次の派生クラスを使用します (例として MXML のモックアップのみ)。

<!-- Component ChildComponent.mxml -->
<mx:SuperComponent>
  <mx:Button id="myButton" label="Press Me!" />
</mx:SuperComponent>

SuperComponent クラスから「myButton」の存在を確認し、それを参照するにはどうすればよいですか? getChildByName( ... ) を使用する必要がありますか?

4

2 に答える 2

2

DragStack のコンポーネントの種類がわかりません。コンテナ (Flex 3) またはグループ (Flex4) を拡張しますか? その場合、コンポーネントはそのライフサイクル プロセスを経て、createChildren メソッドの実行後に myButton にアクセスできるようになります。

MXML は、ボタンをコンポーネントの子として作成するために内部でいくつかの魔法を行っていると思います。

DragStack がコンテナでない場合は、DragStack のデフォルト プロパティを教えてください。DefaultProperty は、クラスのメタデータで指定されます。

基本的に、MXML が行うことは、他のプロパティが指定されていない場合、XML 子を SuperComponent クラスのデフォルト プロパティに割り当てることだと思います。別のプロパティに割り当てたい場合は、次のように指定する必要があります。

<mx:SuperComponent>
  <mx:myProperty>
  <mx:Button id="myButton" label="Press Me!" />
 </mx:myProperty>
</mx:SuperComponent>

通常、この構文は、DataGrid の列の配列など、プロパティに単純な値がない場合にのみ使用されます。

于 2011-05-27T17:44:05.157 に答える
1

がMXML で追加されたコンテナの子でthis["myButton"]あっても、コンテナ内から使用することはできません。まだクラス プロパティではありませんが、コンテナーの子の要素です。myButtonmyButton

pass を名前として使用するgetChildByName()ことをお勧めします。"myButton"

于 2011-05-27T18:10:21.297 に答える