AS3 XMLListCollection在多个字段上进行数据排序,并在值更改时崩溃

时间:2012-12-17 12:10:08

标签: actionscript-3 flash flex actionscript flash-builder

我的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或更新最便宜的元素时,我没有收到任何错误。

有没有人对这种异常有任何想法?

1 个答案:

答案 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;
    }
}

在实现项目渲染器时,您应始终牢记这一点。