避免Flex 4中的Spark List中的ItemRenders缓存
我有两个带有自定义项目渲染器的Spark列表。 我正在开发一个应用程序,使用户能够将这些Item Renderer从一个List拖动到另一个List。 当其中一个IR被放置在新位置或另一个List中时,我正在更新数据提供者:我从一个列表的数据提供者中删除该对象,并将其添加到另一个数据提供者。 这工作正常。
问题在于有时IR会被缓存,并且根据其数据不会显示正确的信息。
我如何强制列表永不缓存IR,以便每次修改数据提供者时,所有项目渲染都会重新创建所有IR。 由于每个列表上的项目都很少,因此性能不会成为问题。
Flextras有一些优点,但要回答您的具体问题,可以在Spark Lists上将useVirtualLayout设置为false。 这将确保列表中的每个项目都有一个渲染器,从而避免了回收问题。 当你有一个相对较短的项目列表时,你应该只做这件事,否则你会遇到性能问题,正如Flextras指出的那样,是Flex回收渲染器的原因。
一些东西..
1)ItemRenderer应该总是被缓存[并且重用]。 这是首先使用Flex列表的好处之一。 我怀疑你的itemRenderer是不正确实现的,以便在数据发生变化时不会改变。 如果你分享一些代码,这将是有益的。 但是,基本上,itemRenderer应该监听dataChange事件,当数据发生变化时,您应该使用新数据更新组件的可视化显示。
2)在Flex 3中,我发誓将一个项目从一个列表拖到另一个列表会自动更新相关的数据提供程序。 您确定需要编写手动代码来进行这些更改吗? 不过,您需要使用代码更新后台。
我在我的设置数据中放置了一个重置方法,以确保渲染器变量重新初始化
override public function set data(object:Object):void
{
if (object == null)
{
return;
}
reset(); // reset locals to their base. ie. x=0, y=0, counter=0
// set up renderer using data
}
链接地址: http://www.djcxy.com/p/5907.html