0

我的 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;
}

错误说明该值为空。首先 value 怎么可能是 null 呢?当我从排序字段中删除 fav 或更新最便宜的元素时,我没有收到任何错误。

有人知道这个异常吗?

4

1 回答 1

1

您必须考虑到您的 itemrenderer 被回收,例如,如果您的集合中的项目顺序发生更改(当您更改排序字段的值时)。当渲染器被回收时,可以将 null 传递给 set data 函数。

这意味着你的功能

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

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

于 2012-12-18T13:29:02.547 回答