请考虑以下代码:
[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]元数据标签 只读属性。
这对于常量值是有意义的,但在这种情况下,值确实会发生变化,它不会直接设置。
答案 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);
}