我有一个带有自定义ItemRenderer的TileList,每个项目都显示一个图像,它从它从dataProvider接收的数据中提取出来。奇怪的是,我不知道为什么有些项目是显示图像不是在他们的数据块中,而是在另一个项目数据中。如果我从自己的数据中提取图像网址,我不知道如何从另一个项目获取图像网址。我使用了一个工具提示来显示图片网址和商品的数据,并验证了网址不在其数据中。
这是我正在使用的临时XML:
<data>
<bs item_id="1">
<variation price="300" month="JAN" stone="Garnet" image="<?=$img_dir?>jan.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
<variation price="400" month="FEB" stone="Garnet" image="<?=$img_dir?>feb.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
<variation price="550" month="MAR" stone="Garnet" image="<?=$img_dir?>march.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
<variation price="625" month="APR" stone="Garnet" image="<?=$img_dir?>april.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
</bs>
<bs item_id="2">
<variation price="300" month="JAN" stone="Garnet" image="<?=$img_dir?>jan.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
<variation price="400" month="FEB" stone="Garnet" image="<?=$img_dir?>feb.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
<variation price="550" month="MAR" stone="Garnet" image="<?=$img_dir?>march.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
<variation price="625" month="APR" stone="Garnet" image="<?=$img_dir?>april.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
</bs>
<bs item_id="3">
<variation price="300" month="JAN" stone="Garnet" image="<?=$img_dir?>jan.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
<variation price="400" month="FEB" stone="Garnet" image="<?=$img_dir?>feb.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
<variation price="550" month="MAR" stone="Garnet" image="<?=$img_dir?>march.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
<variation price="625" month="APR" stone="Garnet" image="<?=$img_dir?>april.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
</bs>
<bs item_id="4">
<variation price="300" month="JAN" stone="Garnet" image="<?=$img_dir?>PE105-BT.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
<variation price="400" month="FEB" stone="Garnet" image="<?=$img_dir?>PE105-EM.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
<variation price="550" month="MAR" stone="Garnet" image="<?=$img_dir?>PE105-OP.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
<variation price="625" month="APR" stone="Garnet" image="<?=$img_dir?>PE105.png" style="xsdfcSD" gold_color="Yellow" gold_carat="10"/>
</bs>
</data>
每个项目得到一个&lt; bs&gt;块。 (4项)
以下是ItemRender的代码:
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="150" height="150" xmlns:local="*">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private var _randomIndex:uint;
private var _indexSet:Boolean;
private function getRandomImage ():String
{
if (!_indexSet)
{
var maxIndex:uint = data.children().length();
_randomIndex = Math.floor(Math.random()*maxIndex);
_indexSet = true;
}
return data.children()[_randomIndex].@image;
}
]]>
</mx:Script>
<local:LoadingImage id="tn" toolTip="{tn.source+'\n\n'+data}" source="{getRandomImage()}" width="150" height="150"/>
</mx:Canvas>
第二个和第三个显示仅在第四个区块中的图像。
有人看到我没看到的东西吗?
谢谢!
答案 0 :(得分:1)
Itemrenderers是循环使用的,所以如果你在set data()中进行任何处理,你应该总是匹配if / else语句。您不能假设itemrender中的成员变量处于“已知”状态。在您的代码中,看起来indexSet未正确初始化+ if语句中没有其他内容。
答案 1 :(得分:0)
什么时候调用getRandomImage? ItemRenderer被重复使用,因此它们可能附有旧图像。如果您没有使用新值重新加载它,它仍将具有相同的图像。也许你可以尝试重载dataChanged事件?我也注意到你的_indexSet可能没有像上面所说的那样工作,但这不应该是你的主要问题。
答案 2 :(得分:0)
我发现如果我将“数据”传递给像getRandomImage(data)这样的函数,它就解决了这个问题。虽然不是100%肯定。