Flex:在值对象中生成getter Bindable

时间:2010-08-11 14:31:47

标签: flex getter bindable

我在Flex中有一个值对象,如下所示:

[绑定]

public class MyVO
{
    public var a:ArrayCollection;
    public var b:ArrayCollection;
    private var timeSort:Sort;

    public function ShiftVO(){
        timeSort = new Sort();
        timeSort.compareFunction = sortDates;
    }

public function get times():ArrayCollection{        
    var ac:ArrayCollection = new ArrayCollection(a.toArray().concat(b.toArray()));

    ac.sort = timeSort;
    ac.refresh();

    return ac;
}   

这是关于getter方法的。我在数据网格中显示getter的数据,每当我更改ab的某些值时,我也想更新视图。我该如何实现这一目标?目前视图不会自动更新,我必须再次打开视图才能看到新值。

1 个答案:

答案 0 :(得分:3)

当您创建属性[Bindable]时,Flex将在调用其setter时读取getter(即,在更新属性时);您尚未声明任何setter,因此Flex无法知道属性的值已更新。

  

您必须定义both a setter and a getter method以将[Bindable]标记与属性一起使用。如果仅定义setter方法,则创建一个只写属性,不能将其用作数据绑定表达式的源。如果只定义一个getter方法,则创建一个只读属性,可以将其用作数据绑定表达式的源,而无需插入[Bindable]元数据标记。这类似于使用const关键字定义的变量作为数据绑定表达式的源的方式。

您可以定义一个空的setter,并在更新a或b时调用它。

public function set times(ac:ArrayCollection):void { }

//somewhere else in the code:

a = someArrayCol;
/** 
 * this will invoke the setter which will in turn 
 * invoke the bindable getter and update the values 
 * */
times = null;

注意到你在课堂上使用Bindable而不是属性:当你使用Bindable tag this way时,它会使

  

可用作绑定表达式的源,您定义为变量的所有公共属性,以及使用setter和getter方法定义的所有公共属性。

因此,除非定义一个setter,否则即使将整个类声明为可绑定,该属性也不可绑定。