Apache flex 排序后如何刷新flex datagrid的项目呈现器?
我使用一个itemRenderer作为动作脚本中的datagird列(以某种方式以超链接的形式显示数据) 在我对datagrid的任何列进行排序之前,一切都正常!当我进行排序并单击此列中的项时,它会将错误的数据传递给函数onCustomLink。我猜它是在传递基于itemRenderer原始索引的旧数据。不知何故,itemRenderer类(CustomLinkRenderer)没有刷新其数据 我尝试将invalidateDisplayList、ValidateNow()放在datagrid的headerRelease上,但没有任何帮助!我甚至尝试刷新headerRelease()上的数据提供程序,但没有任何帮助 有人能指出我应该做什么来刷新headerRelease事件上为此datagrid创建的itemRenderer实例吗Apache flex 排序后如何刷新flex datagrid的项目呈现器?,apache-flex,actionscript-3,Apache Flex,Actionscript 3,我使用一个itemRenderer作为动作脚本中的datagird列(以某种方式以超链接的形式显示数据) 在我对datagrid的任何列进行排序之前,一切都正常!当我进行排序并单击此列中的项时,它会将错误的数据传递给函数onCustomLink。我猜它是在传递基于itemRenderer原始索引的旧数据。不知何故,itemRenderer类(CustomLinkRenderer)没有刷新其数据 我尝试将invalidateDisplayList、ValidateNow()放在datagrid的h
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);
谢谢…我猜一点。我不清楚您提供的代码片段在代码中的确切位置 但是,在我看来,您的itemRenderer没有正确地更新自身。itemRenderer应该侦听dataChange事件;当对数据提供程序进行排序时,应该调用它。在渲染器中执行以下操作:
this.addEventListener('dataChange',onDataChange);
public function onDataChange(event:Event):void{
// do stuff to update the itemRenderer's display
}
嗯,您的代码不是很清楚,因为您没有指定要使用的datagrid、项呈现器或实际排序方式 但是,我相当肯定您的问题是因为您没有刷新ArrayCollection:
arrayCollection.sort();
arrayCollection.refresh();
需要刷新以让datagrid知道如何使用新数据更新项目呈现器。显示更多代码。如果排序有问题,请张贴排序代码。听起来你的渲染器工作不正常,所以也发布代码。除了取决于Flex内部排序之外,我通常通过过滤函数手动对数据源(数组集合)进行排序。由于您将数据填充到组件中,然后该组件通过项呈现连接到IList控制,这显然会导致问题,主要原因可能是组件的复杂性。是的Flextras。。。我想这就是我需要做的。。。但你能告诉我怎么更新itemRenderer的显示吗?我知道答案就在Flextras的答案中——只是我仍然想知道我应该怎么更新itemRenderer的显示?正如//do stuff to updatet the itemRenderer’s display中提到的,这取决于itemRenderer中的内容。一个示例可能是:labelDisplay.text=(数据作为myCustomObject)