我的网格中包含> 1000个数据集。一列使用自定义itemRenderer,用于显示外键的值。
显示所有未滚动显示的数据集,并显示正确的信息。但是当涉及到滚动时,一些数据集将在itemRenderer中显示错误的值。据我所知,这是因为itemRenderers的重复使用。
但是,尽管重用可能很重要,但显示错误的信息不是结果。 那我该怎么摆脱这个问题?
编辑:我设法摆脱了这个问题,但无论如何我会发布一些代码来指出我的计划:<?xml version="1.0" encoding="utf-8"?>
<mx:Script>
<![CDATA[
private var dataAccess : DataAccess = DataAccess.getInstance();
private var foreign : ArrayCollection = new ArrayCollection();
private function onCreationComplete() : void
{
dataAccess.service.getForeignDatasets.addEventListener("result", onGetForeignDatasets);
dataAccess.service.getForeignDatasets();
}
private function onGetForeignDatasets(event : ResultEvent) : void
{
foreign = event.result as ArrayCollection;
preSelect();
}
//gets the entry from the foreign entity which matches
//the foreign key in this.data
private function preSelect() : void
{
for each(var obj : Object in foreign)
{
if(obj.id == data.foreignKey))
{
value.text = obj.name;
return;
}
}
value.text = "";
}
private function onDataChange() : void
{
preSelect();
}
]]>
</mx:Script>
我留下了所有不必要的代码......
上面的代码可以解决显示错误数据的问题。
实现此功能还有其他想法吗?
答案 0 :(得分:0)
如果您的项呈示器将信息缓存在私有变量中(或其他任何地方),则会发生这种情况。项目渲染通过“data”属性获取数据。它不应该使用不在“data”属性中的任何数据。如果您必须到达外部以获取其他数据(您实际上不应该这样做),那么请确保在数据属性更改时使该数据无效(覆盖数据以标记已更改的标志,然后调用super.data)。 / p>
如果这不能解决您的问题,请发布您的项目渲染器代码。
答案 1 :(得分:0)
使用DataGrid控件的自定义ItemRenderer,我也遇到过这种问题。 一切都很好,但是当我滚动DataGrid时,我的ItemRenderers没有显示正确的值。我花了很多时间来了解发生了什么。 原因是IremRenderers的工作方式。请记住,itemRenderers是回收的。 请阅读very good article about Item Renderers。
简而言之,您必须在构造函数或CreationComplete事件中设置ItemRenderer的数据,而不是在其他函数中。
对于MX DataGrid-您必须覆盖公共功能集数据,如下所示:
override public function set data( value:Object ) : void
{
super.data = value;
// your code to set your data
}
对于Spark DataGrid,您必须在
中执行此操作override public function prepare (hasBeenRecycled)
希望它可以提供帮助。
答案 2 :(得分:0)
useVirtualLayout="false"
- 禁止itemRenderers重新使用。这是List基本组件布局的属性。