Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3 XMLListCollection数据在多个字段上排序,并在值更改时崩溃_Actionscript 3_Flash_Apache Flex_Actionscript_Flash Builder - Fatal编程技术网

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

Actionscript 3 AS3 XMLListCollection数据在多个字段上排序,并在值更改时崩溃,actionscript-3,flash,apache-flex,actionscript,flash-builder,Actionscript 3,Flash,Apache Flex,Actionscript,Flash Builder,我的XML: 我正在尝试使用fav和最便宜的元素对这个XMLListCollection进行排序 var dataprovider:XMLListCollection = new XMLListCollection(xml.destination); 在我更新fav值之前,一切正常: var sort:Sort = new Sort(); sort.fields = [new SortField("fav" , true , true)]; sort.fields.push(new SortF

我的XML:

我正在尝试使用fav和最便宜的元素对这个XMLListCollection进行排序

var dataprovider:XMLListCollection = new XMLListCollection(xml.destination);
在我更新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();
XML结构在更新后看起来完全相同,但我的itemrenderer对象抛出错误:

xml.destination.(id == String(destId))[0].fav = 0;
声明该值为null时出错。这个值怎么可能是空的呢?当我从排序字段中删除fav或更新最便宜的元素时,我没有得到任何错误


有人知道这种异常情况吗?

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

这意味着你的功能

override public function set data( value:Object ) : void { 
    dest_name.text = value.text;
}
应改为:

override public function set data( value:Object ) : void { 
    dest_name.text = value.text;
}

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

dest_name来自哪里?我在您的xml中没有看到它。dest_name表示的对象是否可以是临时变量?(即,在已完成执行的函数中声明?)另一种可能是“id==String(destId)”没有返回任何匹配项。XML数据正在很好地更新。dest_name是label元素。正如我在文章中所说,缺少的是名为“value”的param,它是由flex framework从dataprovider自动提供给函数的。请仔细检查“xml.destination.(id==String(destId))[0]”是否返回了一个有效的匹配项。确实如此,我忘了提及示例中大量的代码,以便更容易、更快地阅读。Id标签也存在于xml代码中。是的,我自己已经找到了,但还没有更新这篇文章。但是谢谢你的努力。
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;
    }
}