最近,我注意到在gridColumn中使用labelFunction时出现了一个问题:
当嵌套(显示)属性更改时,它不会刷新。
// SomeClass and SomeSubClass has [Bindable] metadata
[Bindable]
private var someSubClass:SomeSubClass;
[Bindable]
private var someClass:SomeClass;
private function inits():void{
someSubClass = new SomeSubClass();
someSubClass.value = "SomeSubValue";
someClass = new SomeClass();
someClass.subclass = someSubClass;
var ac:ArrayCollection = new ArrayCollection();
ac.addItem(someClass);
dg.dataProvider = ac;
}
private function myLabelFunction(item:Object, column:GridColumn):String
{
return (item.subclass)? item.subclass.value : "";
}mxml
<s:Button click="someSubClass.value = 'Hello World'"/>
<s:DataGrid dataProvider="{dataProvider}" width="100%" height="200">
<s:columns>
<s:ArrayList>
<s:GridColumn labelFunction="{myLabelFunction}" headerText="NoRenderer"/>
<s:GridColumn headerText="WithRenderer">
<s:itemRenderer>
<fx:Component>
<s:GridItemRenderer>
<s:Label text="{data.subclass.value}"/>
</s:GridItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:gridColumn>
</s:ArrayList>
</s:columns>
</s:DataGrid>当按钮单击时,使用labelFunction的第一列仍然显示旧值,但第二列(使用自定义渲染器)工作正常。我正在尝试使用尽可能少的自定义项目渲染器的性能问题。或者我的标签函数出了什么问题?
发布于 2013-06-28 22:35:26
我从来没有尝试过这个,但我对它不更新并不感到惊讶。在第二个示例中,您显式地在data.subclass.value上设置了绑定链。在使用myLabelFunction的第一种情况下,item.subclass上没有设置绑定,所以它不会有任何“神奇”的方式来知道您想要查看该值的变化。
我会选择自定义渲染器,我不确定您的特定性能问题是什么,但只要您保留虚拟布局/渲染器回收,它应该是可管理的。
https://stackoverflow.com/questions/17353782
复制相似问题