我的XML:
<destinations>
<destination>
<fav>1</fav>
<cheapest>140</cheapest>
</destination>
<destination>
<fav>0</fav>
<cheapest>150</cheapest>
</destination>
</destinations>
我正在为我的spark List组件创建XMLListCollection。
var dataprovider:XMLListCollection = new XMLListCollection(xml.destination);
我正在尝试使用fav和最便宜的元素对此XMLListCollection进行排序。
var sort:Sort = new Sort();
sort.fields = [new SortField("fav" , true , true)];
sort.fields.push(new SortField("cheapest" , false , true));
dataprovider.sort = sort;
dataprovider.refresh();
一切正常,直到我更新fav的值:
xml.destination.(id == String(destId))[0].fav = 0;
更新后XML结构看起来完全一样,但是我的itemrenderer对象会抛出错误:
override public function set data( value:Object ) : void {
dest_name.text = value.text;
}
指出该值为null时出错。首先,价值如何才能成为零?当我从排序字段中删除fav或更新最便宜的元素时,我没有收到任何错误。
有没有人对这种异常有任何想法?
答案 0 :(得分:1)
您必须考虑到您的itemrenderers被回收,例如,如果您的集合中的项目顺序发生变化(当您更改排序字段的值时)。当渲染渲染器时,可以将null传递给设置数据函数。
这意味着你的功能
override public function set data( value:Object ) : void {
dest_name.text = value.text;
}
应该改变:
override public function set data( value:Object ) : void {
if(value){
dest_name.text = value.text;
}
}
在实现项目渲染器时,您应始终牢记这一点。