我在动作脚本中使用itemRenderer作为datagird列(以某种方式显示形式的超链接)。
一切正常,直到我对datagrid的任何列进行排序!当我进行排序并单击此列中的项目时,它会将错误的数据传递给onCustomLink上的函数。我猜它是基于itemRenderer的原始索引传递旧数据。以某种方式,itemRenderer类(CustomLinkRenderer)没有刷新其数据!
我尝试在datagrid的headerRelease上放置invalidateDisplayList,ValidateNow()但没有帮助!我甚至尝试刷新headerRelease()上的dataprovider,但没有帮助......
有人可以指出我应该做些什么来刷新在headerRelease事件中为此数据网格创建的itemRenderer实例?
private var _col1:DataGridColumn;
var rendr1:ClassFactory = new ClassFactory(CustomLinkRenderer);
_col1.dataField = 'emp_name';
rendr1.properties = {SelCustomLinkName: 'emp_name'};
_col1.itemRenderer = rendr1;
this.addEventListener(CustomLinkRendererEvent.CUSTOM_LINK_RENDERER_EVENT,onCustomLink);
...谢谢
答案 0 :(得分:4)
我猜了一下。我不清楚您提供的代码段在您的代码中显示的确切位置。
但是,听起来像你的itemRenderer没有正确更新自己。 itemRenderer应该监听dataChange事件;在对dataProvider进行排序时应该调用它。在渲染器内部执行以下操作:
this.addEventListener('dataChange',onDataChange);
public function onDataChange(event:Event):void{
// do stuff to update the itemRenderer's display
}
答案 1 :(得分:0)
好吧,你的代码不是很清楚,因为你没有指定你正在使用的数据网格,项目渲染器或你实际排序的方式。
但是,我很确定你的问题是因为你没有刷新你的ArrayCollection:
arrayCollection.sort();
arrayCollection.refresh();
需要刷新才能让datagrid知道用新数据更新项目渲染器。