我有一个简单的 ItemRenderer,当我在 Spark 产品列表中使用它时会导致奇怪的行为。定义如下:
<?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"
creationComplete="setProduct()">
<fx:Script>
<![CDATA[
[Bindable]
private var p:MyProduct;
private function setProduct():void
{
p = data as MyProduct;
}
]]>
</fx:Script>
<s:Label text="{p.name}" paddingTop="6" paddingBottom="4"
color="{p.active ? Constants.BLACK : Constants.DISABLED_COLOR}"
fontStyle="{p.active ? 'normal' : FontStyle.ITALIC}"/>
</s:ItemRenderer>
它与 List 的默认 ItemRenderer 基本相同。我决定使用该变量p
,这样我就不必(data as MyProduct)
在标签绑定中一遍又一遍地编写(这在更大、更复杂的 ItemRenderer 中尤其麻烦)。
它导致的行为似乎“反转”了显示的项目,但项目的实际顺序保持不变。当产品使用新值更新时会发生这种情况。例如,我将有一个产品列表A B C D
。如果我更新其中任何一个的属性,则 List 会将顺序更改为show D C B A
。但是如果我点击这个反向列表中的产品 D,它仍然会“加载”产品 A。 这篇文章描述了一个类似的问题,但没有包含代码,所以我不确定它是否完全相同。
我将此错误跟踪到使用变量p
. 如果我只是(data as MyProduct)
在标签绑定中使用,它可以正常工作。如果我从上面的链接中获取示例并setProduct()
在事件上运行该方法dataChange
,那么错误就会消失并按预期工作。但是,我不相信这不仅仅是巧合。
有没有其他人经历过这样的事情?问题是否与使用事件直接相关creationComplete
?我在想这可能creationComplete
只开火一次,就把一切都搞砸了。不确定这与列表反转显示的产品有什么关系。