0

Flex 3でカスタムコンテナを作成したいと思います。このコンテナに、ユーザーが設定するフラグに応じて、TabNavigatorまたはVBoxのいずれかの内部コンテナを持たせたいです。このフラグは、ページがレンダリングされると変更されないため、あるコンポーネントから別のコンポーネントに「動的に」移動する必要はありません。

これまでのところ、私はこのコードを持っています:

public class AccNavigator extends Container {
public var container:Container;

public function AccNavigator() {
    if (GlobalSettings.Vertical) { // This is the said variable
        container = new VBox();
    }
    else {
        container = new TabNavigator();
    }
    container.percentHeight = 100;
    container.percentWidth = 100;
}

override protected function createChildren():void {
    super.createChildren();
    this.addChild(container);
}

override public function addChild(c:DisplayObject):DisplayObject {
    if (c == container) {
        // MessageAlert is the same as an Alert but with custom code
        MessageAlert.show("addChild: Adding Container");
        super.addChild(c);
    } else {
        MessageAlert.show("addChild: " + c.toString());
        container.addChild(c);
    }
    return c;
}

override protected function initializationComplete():void {
    // used for bebugging purposes
    MessageAlert.show("container is visible: " + container.visible.toString());
    MessageAlert.show("this is visible: " + visible.toString());
    MessageAlert.show("container children: " + container.numChildren);
    MessageAlert.show("this children: "+ this.numChildren);
}
}

私はこのカスタムコンテナをmxmlで次のように使用しています:

<AccNavigator>
   <HBox>
      <more things...>
   </HBox>
   <HBox>
      <more things...>
   </HBox>
</AccNavigator>

しかし、アプリケーションを実行すると、どのコンポーネントも表示されません。initializeCompleteコードを実行すると、次のように表示されます。

  • コンテナが表示されます:true
  • これは目に見えます:true
  • コンテナの子:2
  • この子供:1

コンポーネントのライフサイクルを理解するために、このhttp://www.developmentarc.com/site/sites/default/files/understanding_the_flex_3_lifecycle_v1.0.pdfを読んでしばらく時間を費やしまし たが、それでもコードに何が欠けているのか理解できません。 。

誰かが私を助けて、私が欠けているものを教えてもらえますか?

ありがとう。

4

2 に答える 2

0

問題は、Container を拡張するべきではなかったことです。したがって、クラス宣言は次のようになります。

public class AccNavigator extends VBox {
....
}

他のすべては正しいです。

于 2012-11-07T21:39:18.010 に答える