帮助我理解数据绑定
当我在类中创建变量时:
[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;
}
为什么它只在get函数上生成标签'[Bindable]'? 对我来说,似乎它应该在set函数上,因为我想知道什么时候 值的变化,而不是刚刚读取的值。
答案 0 :(得分: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"));
}
由于可绑定元数据包含事件字符串,因此不会生成额外代码。注意,如果您忘记从setter发送事件,编译器将不会发出警告。实际上,您可以从类中的任何位置调度自定义绑定事件(这对于可绑定的函数非常有用。)