最近我注意到在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仍然会替换旧值,但第二列(使用自定义渲染器)工作正常。我试图尽可能少地使用自定义项目渲染器来解决性能问题。或者我的标签功能出了什么问题?
答案 0 :(得分:1)
我从未尝试过这个,但我不会惊讶它不会更新。在第二个示例中,您已在data.subclass.value上显式设置绑定链。在使用myLabelFunction的第一种情况下,item.subclass上没有绑定设置,因此Flex不会有任何“神奇”的方式知道您想要观察更改的值。
我会使用自定义渲染器,我不确定您的特定性能问题是什么,但只要您将虚拟布局/渲染器重新打开,它就应该是可管理的。