Getter和Setter方法与FLex中的公共属性

Kev*_*vin 4 apache-flex

在绑定Flex中的值时,哪种方法更好?

cli*_*ers 6

使用以下任一方法公开可绑定的公共属性被视为Flex中的最佳做法:

[Bindable] public var dataProvider:Object;
[Bindable] public function get dataProvider():Object { ... }
Run Code Online (Sandbox Code Playgroud)

get/set函数对比常规公共属性更灵活.通过使用[Bindable]标记注释get函数,您仍然可以轻松地使属性可绑定.但是,您可以在"set"函数中实现一些自定义逻辑,包括设置脏标志和使属性,大小或显示列表无效.例如:

private var _dataProvider:Object;
private var dataProviderChanged:Boolean;
public function set dataProvider(value:Object):void
{
    if (_dataProvider != value)
    {
        _dataProvider = value;
        dataProviderChanged = true;
        invalidateProperties();
    }
}
[Bindable] public function get dataProvider():Object
{
    return _dataProvider;
}
Run Code Online (Sandbox Code Playgroud)

此模式在Flex框架组件中大量使用.失效模型非常干净,也可以在自定义组件中实现最佳性能.

您还可以为可绑定属性指定自定义事件,以便可以从多个位置触发绑定,而不是仅通过调用setter:

[Bindable( "dataProviderChanged" )]
public function get dataProvider():Object
{
    return _dataProvider;
}

public function someRandomMethod():void
{
     // ...
     // pretend that we just finished some processing
    _dataProvider = newValue;
    dispatchEvent( new Event( "dataProviderChanged" ) );
}
Run Code Online (Sandbox Code Playgroud)

如果要将属性设置为只读,这也很有效,这意味着它没有匹配的"set"方法.