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>

但是当我运行应用程序时,没有一个组件是可见的。执行initializationComplete代码时,我看到以下内容:

  • 容器可见: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 回答
0

从您希望容器基于的容器类型扩展。例如,如果您想拥有基于 HBox 的东西,则从 HBox 扩展;如果您想实现基于 VBox 的东西,则从 VBox 扩展。从技术上讲,您可以扩展 Container,但由于 Container 太接近层次结构的“根”,您将不得不以某种方式“重新发明轮子”。

于 2015-10-07T19:13:06.773 回答