Я сейчас использую новый 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>
Кто-нибудь знает решение, вы бы мне очень помогли?
Заранее спасибо.
С уважением,
Тибо Хейлен