Гибкое неожиданное поведение с классом и itemRenderer - PullRequest
0 голосов
/ 27 мая 2011

Я упал на поведение, которое я не ожидал, пожалуйста, объясните мне, чтобы понять и исправить это.- Проблема заключается в следующем: у меня есть класс, который содержит метку, и этот класс используется внутри itemRenderer as, все работает без исключения, но он не показывает текст метки.Я пытался добавить кнопку, но проблема остается - она ​​никогда не добавляет кнопку.

Почему?

public class BusTreeNode extends UIComponent
{
    protected var label : Label;

    public function BusTreeNode()
    {
        super();

        label = new Label();
        this.addChild( label );
        label.x    = 40;
        label.y    = 2; 
        label.text = "test";
    }
}

... Внутри itemRenderer:

<sl:BusTreeNode width="100%" />

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Полагаю, проблема в том, что у вас нет measure() реализации в вашем BusTreeNode классе. Таким образом, ваш компонент имеет размер 0x0 по умолчанию. Это объявление:

<sl:BusTreeNode width="100%" />

по-прежнему дают 0 в качестве высоты.

Подробнее о измерении компонентов Flex можно прочитать здесь . И эта статья очень полезна для создания пользовательских компонентов.

1 голос
/ 27 мая 2011

Проще расширять класс sparkR (или mx в Flex 3) ItemRenderer.Создайте новый файл MXML следующим образом:

<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" >

    <!-- label -->
    <s:Label id="labelDisplay" />

</s:ItemRenderer>

Свойство 'text' для labelDisplay будет автоматически установлено списком (или другим компонентом данных), в котором он используется.

Более тогов жизненном цикле компонента Flex визуальные элементы должны быть добавлены в displayList в методе createChildren ().Поэтому, если вы абсолютно хотите написать его на чистом ActionScript, вы можете сделать это следующим образом, но это сложнее:

public class MyItemRenderer extends ItemRenderer {

    private var button:Button;

    override protected function createChildren():void {
        super.createChildren();

        button = new Button();
        addElement(button);
    }

    override public function set label(value:String):void {
        super.label = button.label = value;
    }

}
...