绑定到AS3中的只读getter

时间:2009-09-15 14:56:29

标签: flex actionscript-3 data-binding binding properties

请考虑以下代码:

[Bindable(event="ReportHeaderVO_effectiveFromDateJulian_updated")]
public function set effectiveFromDateJulian ( value:Number ) : void
{
    _effectiveFromDateJulian = value;
    dispatchEvent( new FlexEvent("ReportHeaderVO_effectiveFromDateJulian_updated") );
}

public function get effectiveFromDateJulian () : Number
{
    return _effectiveFromDateJulian;
}

public function get effectiveFromDate () : Date
{
    return DateUtil.convertJDEJulianToDate(_effectiveFromDateJulian);
}

有效的FromDateJulian有一个setter和一个getter,它是日期的数字表示。我提供了一个单独的getter,它检索相同的值,只转换为正确的日期。它只是一个getter,它依赖于numeric属性的setter来获取它的数据;所以effectiveFromDate属性实际上是只读的。

数据绑定适用于effectiveFromDateJulian属性;任何更新工作正常,并正确通知一切。但是当绑定到effectiveFromDate(仅限getter)属性时,我会收到编译器的警告:

warning: unable to bind to property 'effectiveToDate' on class 'com.vo::ReportHeaderVO'

有没有办法可以绑定到这个只读属性?我想我必须在setter上调度一个影响只读属性的事件,但我不知道那会是什么样子。

这是一个简单的示例,您可以想象一个只读属性依赖于几个setter来运行,当更新任何setter时,只读属性也需要触发propertyChanged事件。有任何想法吗?如果我需要澄清任何事情,请告诉我。

更新: 从这里的Adobe文档:

http://livedocs.adobe.com/flex/3/html/help.html?content=databinding_8.html

  

使用只读属性作为   数据绑定的来源

     

您可以自动使用只读   由getter方法定义的属性,   这意味着没有setter方法   数据绑定表达式的源。   Flex执行一次数据绑定   当应用程序启动时。

     

因为数据绑定来自   只读属性只出现一次   应用程序启动,你省略了   [Bindable]元数据标签   只读属性。

这对于常量值是有意义的,但在这种情况下,值确实会发生变化,它不会直接设置。

1 个答案:

答案 0 :(得分:16)

使readonly getter Bindable并从原始的setter方法中调度相应的事件。

[Bindable(event="ReportHeaderVO_effectiveFromDateJulian_updated")]
public function set effectiveFromDateJulian ( value:Number ) : void
{
    _effectiveFromDateJulian = value;
    dispatchEvent( new FlexEvent("ReportHeaderVO_effectiveFromDateJulian_updated") );
    dispatchEvent( new FlexEvent("ReportHeaderVO_effectiveFromDate_updated") );
}
[Bindable(event="ReportHeaderVO_effectiveFromDate_updated")]
public function get effectiveFromDate (date:Date) : Date
{
    return DateUtil.convertJDEJulianToDate(_effectiveFromDateJulian);
}