Itemrenderer не устанавливает декоратор - PullRequest
0 голосов
/ 13 мая 2011

Я сейчас использую новый Flex 4.5 (и flashbuilder 4.5). У меня есть список, в котором отображаются все мои параметры и стандартные (при первом запуске приложения) они имеют серый V в качестве декоратора.

Когда я разрабатывал Flex Hero, я сделал так, чтобы, если я щелкнул по пункту, серый V был заменен зеленым.

Теперь в Flex 4.5 тот же код не работает.

Странная вещь: когда я возвращаюсь к своему предыдущему виду, а затем возвращаюсь в свой список с моими параметрами, он меняет тех, на кого нажали. Я также использую setStyle и меняю цвет на красный, если на него нажали, и это работает, но смена декоратора - нет.

Я сделал небольшой пример, чтобы показать:

<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;

        [Bindable]
        private var m_list:ArrayCollection = new ArrayCollection();

        private function init():void
        {
                for(var i:int = 0 ; i<5 ; i++)
                {
                    var test:SelectableItem = new SelectableItem("Item"+i);
                    m_list.addItem(test);
                }
        }

        protected function list1_clickHandler(event:MouseEvent):void
        {
            SelectableItem(m_list.getItemAt(listID.selectedIndex)).toggleSelection();                       
        }

    ]]>
</fx:Script>

<s:List id="listID"
        x="0" y="99" width="480" height="596"
        dataProvider="{m_list}"
        itemRenderer="views.ListItemRenderer"
        click="list1_clickHandler(event)"/>

</s:View>

Здесь вы можете увидеть класс:

package views
{
public class SelectableItem
{
    private var m_name:String;
    private var m_selected:Boolean;

    public function SelectableItem(name:String,selected:Boolean = false)
    {
        m_name = name;
        m_selected = selected;
    }

    public function get name():String
    {
        return m_name;
    }

    public function set name(value:String):void
    {
        m_name = value;
    }
    [Bindable]
    public function get selected():Boolean
    {
        return m_selected;
    }

    public function set selected(value:Boolean):void
    {
        m_selected = value;
    }

    public function toggleSelection():void
    {
        selected = !selected;
    }

}
}

А вот мой торговец предметами:

<?xml version="1.0" encoding="utf-8"?>
<s:IconItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark"  iconWidth="64" iconHeight="64" 
                labelFunction="itemLabelFunction">
<fx:Script>
    <![CDATA[

        [Embed(source="checked.png")]  
        public var checked:Class;

        [Embed(source="unchecked.png")] 
        public var unchecked:Class;

        override public function set data(value:Object):void
        {
            super.data = value;
            if(value != null)
            {
                if(value.selected)
                {
                    decorator = checked;
                    setStyle("color", "red");
                }
                else
                {
                    decorator = unchecked;
                    setStyle("color", "black");
                }
            }
        }



        private function itemLabelFunction(item:Object):String
        {
            return item.name;
        }
    ]]>
</fx:Script>

Кто-нибудь знает решение, вы бы мне очень помогли?

Заранее спасибо.

С уважением,

Тибо Хейлен

1 Ответ

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

Это известная ошибка во Flex, см. https://bugs.adobe.com/jira/browse/SDK-29929

Кажется, она запланирована для включения в выпуск 4.5.1.

...