GridColumn labelFunction不可绑定

时间:2013-06-27 21:47:10

标签: actionscript-3 flex air

最近我注意到在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仍然会替换旧值,但第二列(使用自定义渲染器)工作正常。我试图尽可能少地使用自定义项目渲染器来解决性能问题。或者我的标签功能出了什么问题?

1 个答案:

答案 0 :(得分:1)

我从未尝试过这个,但我不会惊讶它不会更新。在第二个示例中,您已在data.subclass.value上显式设置绑定链。在使用myLabelFunction的第一种情况下,item.subclass上没有绑定设置,因此Flex不会有任何“神奇”的方式知道您想要观察更改的值。

我会使用自定义渲染器,我不确定您的特定性能问题是什么,但只要您将虚拟布局/渲染器重新打开,它就应该是可管理的。