绑定到AS3中的只读getter

Rya*_*ill 17 apache-flex data-binding binding properties actionscript-3

请考虑以下代码:

[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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

warning: unable to bind to property 'effectiveToDate' on class 'com.vo::ReportHeaderVO'
Run Code Online (Sandbox Code Playgroud)

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

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

更新:从这里的Adobe文档:

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

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

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

由于只读属性的数据绑定仅在应用程序启动时发生一次,因此省略了只读属性的[Bindable]元数据标记.

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

Ama*_*osh 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);
}
Run Code Online (Sandbox Code Playgroud)

  • http://livedocs.adobe.com/flex/3/html/help.html?content=databinding_2.html#190306说"如果您指定事件名称,则在源属性更改时调度事件是您的责任".我刚刚尝试过它并且有效.谷歌搜索带我到http://www.deitte.com/archives/2009/04/bindable_getter.htm和http://joshblog.net/2009/07/15/flex-readonly-bindable-getter-ignored-warning-解释/ (2认同)