Flex:帮助我理解数据绑定getter和setter

ste*_*mcl 4 apache-flex data-binding getter-setter

帮助我理解数据绑定
当我在类中创建变量时:

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

为什么它只在get函数上生成标签'[Bindable]'?
对我来说,它似乎应该在set函数上,因为我想知道值何时更改,而不是只读取值.

Sun*_* D. 12

有什么可能有助于理解这里发生的是MXML编译器在您创建[Bindable]时将为您生成的代码.MXML编译器将[Bindable]属性包装在它自己的getter/setter中.它这样做,以便包装器setter方法可以在设置新值时调度"propertyChange"事件.此事件通知绑定到属性的各方该值已更改.

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

由于可绑定元数据包含事件字符串,因此不会生成额外代码.注意,如果您忘记从setter发送事件,编译器将不会发出警告.实际上,您可以从类中的任何位置调度自定义绑定事件(这对于可绑定的函数非常有用).