我有一个ItemRenderer
,其中的数据有一些标志。我需要根据这些标志更改ItemRenderer的颜色。我该如何实现这一点?这是我的IR:
<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
autoDrawBackground="false"
x="{data.x}" y="{data.y}">
<s:states>
<s:State name="node"/>
<s:State name="nodeIn"/>
<s:State name="nodeOut"/>
<s:State name="nodeTrafficLight"/>
<s:State name="nodeIntersection"/>
<s:State name="nodeBlocked"/>
</s:states>
<s:Ellipse width="16" height="16" x="-8" y="-8">
<s:stroke>
<s:SolidColorStroke weight="2"
color="#FFFF00"
color.nodeTrafficLight="#FF00FF"
color.nodeIntersection="#FF9900"
color.nodeBlocked="#000000"
color.nodeIn="#00FF00"
color.nodeOut="#FF0000"/>
</s:stroke>
<s:fill>
<s:SolidColor alpha=".5"
color="#FFFF00"
color.nodeTrafficLight="#FF00FF"
color.nodeIntersection="#FF9900"
color.nodeBlocked="#000000"
color.nodeIn="#00FF00"
color.nodeOut="#FF0000"/>
</s:fill>
</s:Ellipse>
<fx:Script>
<![CDATA[
override protected function getCurrentRendererState():String
{
if (data.isBlocked)
return "nodeBlocked";
if (data.isIn)
return "nodeIn";
if (data.isOut)
return "nodeOut";
if (data.isIntersection)
return "nodeIntersection";
return "node";
}
]]>
</fx:Script>
</s:ItemRenderer>
但是当这些标记(例如data.isIn
)改变时,我没有得到这些状态的更新。我的模型有[Bindable]
标记。
1条答案
按热度按时间mo49yndu1#
首先,我不认为x和y值对渲染器内部有影响。list类将处理渲染器的定位。
也就是说,呈现器不响应dataChange事件;这样渲染器在数据更改时不会自我更新。添加dataChange事件处理程序:
invalidateRendererState()方法应强制commitProperties()重新运行;这又将强制执行getCurrentRendererState()。
如果由于某种原因,当您更改dataProvider中的数据时,onDataChange()事件没有触发;您必须在dataProvider上使用itemUpdated()或refresh()函数来“宣布”您更改了数据。