代码之家  ›  专栏  ›  技术社区  ›  Ryan Guill

绑定到AS3中的只读getter

  •  17
  • Ryan Guill  · 技术社区  · 15 年前

    考虑下面的代码:

    [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);
    }
    

    effectiveFromDateJulian有一个setter和一个getter,它是日期的数字表示形式。我提供了一个单独的getter,它检索相同的值,只转换为正确的日期。但它只是一个getter,依赖setter获取数值属性的数据;因此,effectiveFromDate属性实际上是只读的。

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

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

    从以下Adobe文档:

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

    数据绑定的源

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

    只读属性一次只出现一次 应用程序启动时,忽略 [Bindable]的元数据标记 只读属性。

    这对于常量值来说是有意义的,但在这种情况下,值确实会改变,只是不能直接设置。

    1 回复  |  直到 15 年前
        1
  •  16
  •   Amarghosh    15 年前

    使只读getter可绑定,并从原始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);
    }