Avoid ItemRenders Caching in a Spark List in Flex 4

I have two Spark Lists with custom Item Renderers. I'm working on an application that enables users to drag these Item Renderers from one List to the other. When one of these IRs is dropped in a new position or in another List, I'm updating the dataproviders: I remove the object from one list's dataprovider and add it to the other's dataprovider. This is working ok.

The problem is that sometimes the IR is cached and it doesn't show the correct information, based on its data.

How can I force the Lists to never cache IRs, so that every time I modify the dataprovider all Item Renders re-create all IRs. Performance won't be an issue since I have few items on each list.


Flextras has some good points, but to answer your specific question, you can set useVirtualLayout to false on Spark Lists. This will ensure there is a renderer for every item in your list and thus avoiding the recycling issues. You should really only do this when you have a relatively short list of items though, otherwise you will have performance issues, which as Flextras noted, is the reason Flex recycles renderers.


A few things..

1) ItemRenderers should always be cached [and reused]. This is one of the benefits of using a Flex list in the first place. I suspect your itemRenderer is implemented inorrectly as to not change when it's data changes. If you share some code for this it would be helpful. But, basically, your itemRenderer should listen to the dataChange event and when the data changes you should update the component's visual display with new data.

2) In Flex 3, I'd have sworn that dragging an item from one list to another automatically updated the relevant dataProviders. Are you sure you need to write manual code to make those changes? You will, though, need code to update your backend as relevant.


我在我的设置数据中放置了一个重置​​方法,以确保渲染器变量重新初始化

 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/5908.html

上一篇: Flex 4中自定义项目渲染器的奇怪行为

下一篇: 避免Flex 4中的Spark List中的ItemRenders缓存