Контейнер ActionScript 3 дочерний контейнер накладывается друг на друга - PullRequest
0 голосов
/ 16 ноября 2009

Я использую список аккордеонов в as3 для отображения информации о кластере маркеров на карте Google. По какой-то причине текущий выбранный дочерний контейнер (vbox) частично перекрывается меткой следующего контейнера. И кажется, чем длиннее список аккордеонов, тем больше будет площадь контейнера. Я попытался установить для свойства resizeToContent значение true / false, но ни один из них не работает. Вот пользовательский класс аккордеона (list - массив объектов информационного окна маркера, который также расширяет 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 голосов
/ 18 ноября 2009

Я не уверен, в чем именно причина вашей проблемы, но вот пара мыслей, которые должны помочь.

  1. Вам нужно начать конструктор с оператора super ().

    public function AccordionWindow(list:Array)
    {
        super();
    
    <pre><code>    // 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;
    </code>
    }

Извините - не знаю, почему у меня так много проблем с форматированием кода ...

  1. Исходя из опубликованного вами кода, похоже, что класс AccordionWindow предназначен для создания Аккордеона и его помещения в Коробку. Может быть, у вас есть конкретная потребность делать вещи так, как вы пытаетесь это сделать, но по моему опыту было бы лучше расширить Box, а не UIComponent.

  2. Вы будете сталкиваться с проблемами, создавая дочерние элементы и добавляя их на сцену в конструкторе. Вместо этого переопределите защищенный метод createChildren и переместите весь код, который у вас есть в конструкторе, в этот метод.

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
}

Очень полезный пост о жизненном цикле UIComponent на http://danorlando.com/?p=122.

...