gpt4 book ai didi

apache-flex - 弹性 : Help me understand data Binding on getters and setters

转载 作者:行者123 更新时间:2023-12-03 15:25:57 24 4
gpt4 key购买 nike

帮我理解数据绑定(bind)
当我在类中创建变量时:
[可绑定(bind)] private var _name:String;
然后生成getter和setter,我得到:

            private var _name:String;

[Bindable]
public function get name():String
{
return _name;
}

public function set name(value:String):void
{
_name = value;
}

为什么它只在get函数上生成标签'[Bindable]'?
对我来说,它似乎应该在 set 功能上,因为我想知道什么时候
值发生变化,而不是在刚刚读取值时发生变化。

最佳答案

可能有助于理解这里发生的事情是 MXML 编译器在您制作 [Bindable] 时将为您生成的代码。 MXML 编译器将您的 [Bindable] 属性包装在它自己的 getter/setter 中。这样做是为了让包装器 setter 方法可以在设置新值时调度“propertyChange”事件。此事件通知绑定(bind)到属性的各方该值已更改。

Actionscript 中的 Getter/setter 被认为是对象的属性(它们不是对象的方法)。因此,无论您是否将 getter 或 setter 注释为 [Bindable],生成的代码都会做正确的事情。

值得注意的是,您可以通过在属性更改时调度自己的事件来避免生成代码并优化情况。为此,您的 [Bindable] 元数据标记需要包含将在属性更改时调度的事件名称:

private var _name:String;

[Bindable("nameChanged")]
public function get name():String
{
return _name;
}

public function set name(value:String)
{
if (_name == value)
return;
_name = value;
dispatchEvent(new Event("nameChanged"));
}

因为可绑定(bind)元数据包含事件字符串,所以不会生成额外代码。请注意,如果您忘记从 setter 分派(dispatch)事件,编译器不会警告您。事实上,您可以从类中的任何位置调度您的自定义绑定(bind)事件(这对于可绑定(bind)的函数很有用)。

关于apache-flex - 弹性 : Help me understand data Binding on getters and setters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16677593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com