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を読んでしばらく時間を費やしまし たが、それでもコードに何が欠けているのか理解できません。 。
誰かが私を助けて、私が欠けているものを教えてもらえますか?
ありがとう。