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

私はこの XMLListCollection を fav と最も安価な要素を使用してソートしようとしています。

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 であることを示すエラー。そもそも値をnullにするにはどうすればよいですか? 並べ替えフィールドからお気に入りを削除するか、代わりに最も安い要素を更新しても、エラーは発生しません。

誰もこの異常について何か考えを持っていますか?

4

1 に答える 1

1

たとえば、コレクション内のアイテムの順序が変更された場合(並べ替えフィールドの値を変更した場合)、アイテムレンダラーがリサイクルされることを考慮する必要があります。レンダラーがリサイクルされると、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 に答える