2

最近我在使用 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 : "";
}

xml

<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 的第一列时仍然显示旧值,但第二列(使用自定义渲染器)工作正常。我正在尝试尽可能少地使用自定义项目渲染器来解决性能问题。还是我的标签功能有问题?

4

1 回答 1

1

我从来没有尝试过这个,但我并不感到惊讶它不会更新。在第二个示例中,您已在 data.subclass.value 上显式设置绑定链。在 myLabelFunction 的第一种情况下,没有在 item.subclass 上设置绑定,因此 Flex 不会有任何“神奇”的方式来知道您是否希望查看该值的更改。

我会使用自定义渲染器,我不确定您的特定性能问题是什么,但只要您保留虚拟布局/渲染器回收,它应该是可管理的。

于 2013-06-28T14:35:26.260 回答