ActionScript 3手风琴组件子容器相互叠加

时间:2009-11-16 03:29:09

标签: actionscript-3 flexbuilder accordion

我在as3中使用手风琴列表在谷歌地图上显示标记群集信息。出于某种原因,当前选定的子容器(vbox)部分地由下一个容器的标签覆盖。手风琴列表似乎越长,容器的面积就越大。我试图将resizeToContent属性设置为true / false但似乎都不起作用。这是自定义手风琴类(list是一个标记infowindow对象的数组,它也扩展了UIComponent):

package{
         import mx.containers.Accordion;
          ...
public class AccordionWindow extends UIComponent{ 

public function AccordionWindow(list:Array){

        var panel:Box = new Box();
        panel.width = 300;
        panel.height = 200;
        addChild(panel);

        var acc:Accordion = new Accordion();
        acc.percentWidth = 100;
        acc.percentHeight = 100;

        for (var i:int = 0; i < list.length; i++)
        {
            var vbox:VBox = new VBox();
            vbox.label = "Item" + String(i);
            vbox.addChild(list[i]);
            acc.addChild(vbox);
        }

        panel.addChild(acc);
   }
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我不确定问题究竟是什么原因,但这里有一些应该有所帮助的想法。

  1. 您需要使用super()语句启动构造函数。

    public function AccordionWindow(list:Array)
    {
        super();
    
    
        // any other code you might have in your constructor.  
        // generally, you'll want to store arguments in instance properties.  
        // maybe something like this:
    
           this.list = list;
    
    }
  2. 抱歉 - 不知道为什么我在代码格式化方面遇到这么多麻烦......

    1. 根据您发布的代码,看起来AccordionWindow类用于创建Accordion并将其放入Box中。也许你有特定的需要以你尝试的方式做事,但根据我的经验,扩展Box而不是UIComponent会更有意义。

    2. 您可能会遇到创建子项并将其添加到构造函数中的阶段的问题。相反,覆盖受保护的createChildren方法,并将构造函数中当前具有的所有代码移动到该方法。

    3. 自动调用createChildren,因此除了覆盖它并将代码移入其中之外,您不必执行任何操作。

      override protected function createChildren():void
      {
          super.createChildren();  // very important.  do not leave this out.
      
          // paste the code that is currently in the constructor here
      }
      

      有关http://danorlando.com/?p=122的UIComponent生命周期的非常有用的帖子。