绑定到 AS3 中的只读 getter
Posted
技术标签:
【中文标题】绑定到 AS3 中的只读 getter【英文标题】:Binding to a read-only getter in AS3 【发布时间】:2010-11-28 12:01:23 【问题描述】:考虑以下代码:
[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 属性实际上是只读的。
数据绑定适用于 EffectiveFromDateJulian 属性;任何更新都可以正常工作并正确通知一切。但是当绑定到 EffectiveFromDate(仅限 getter)属性时,我会收到来自编译器的警告:
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 方法定义的属性, 这意味着没有 setter 方法,因为 数据绑定表达式的源。 Flex 执行一次数据绑定 当应用程序启动时。
因为数据绑定来自 只读属性只出现一次 应用程序启动,你省略 [可绑定] 元数据标签 只读属性。
这对于常量值是有意义的,但在这种情况下,值确实会发生变化,只是不会直接设置。
【问题讨论】:
【参考方案1】:使只读 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);
【讨论】:
这很完美,正是我想要的。在查看它之后,它完全可以理解它的工作方式和原因,但在文档中仍然不清楚它应该是这样的。因此,当您放置 [Bindable(event)] 元数据时,即使文档显示它被放置在 setter 上,它实际上只是被放置在属性(公开暴露的属性)上。它可以很容易地放在吸气剂上,它的工作原理是一样的。只是出于好奇,您是否有任何指向文档或其他任何显示这样做的链接?再次感谢!这帮助很大。 livedocs.adobe.com/flex/3/html/… 表示“如果您指定事件名称,则在源属性更改时调度事件是您的责任。”我刚试了一下,它奏效了。谷歌搜索将我带到 deitte.com/archives/2009/04/bindable_getter.htm 和 joshblog.net/2009/07/15/… 是的,将应用于属性的 [Bindable] 标记(getter 或 setter)放在哪里都没有关系。尽管出于 asdoc 的目的,将其放在 setter 上是件好事。 优秀。感谢这些链接。你的 google-fu 一定比我的好,我花了几个小时点击链接试图找到答案。再次感谢您的帮助。以上是关于绑定到 AS3 中的只读 getter的主要内容,如果未能解决你的问题,请参考以下文章
WPF .Net 4 - OneWayToSource 绑定到只写属性适用于某些机器!如何?
WPF .Net 4 - OneWayToSource 绑定到只写属性适用于某些机器!如何?
js中的访问器属性中的getter和setter函数实现数据双向绑定
在 v-if 绑定时无法访问 getter 中的数据,但在 v-for 渲染时可以访问
NSFetchedResultsController 中的 NSPredicate 不使用 Category 的 getter