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

时间:2009-07-27 22:35:39

标签: flex

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

2 个答案:

答案 0 :(得分:6)

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

[Bindable] public var dataProvider:Object;
[Bindable] public function get dataProvider():Object { ... }

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;
}

此模式在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" ) );
}

如果你想让属性为只读,这也很有效,这意味着它没有匹配的“set”方法。

答案 1 :(得分:0)

在大多数情况下,由于某些原因,属性更好:

1)在mxml中设置属性很容易。例如:

<mx:Button label="Bla">

,其中label是公共财产。使用setter / getter函数是不可能的,你必须从脚本中调用setLabel(“Bla”)。

2)属性与setter和getter基本相同。 我喜欢在setter变得复杂时再创建一个额外的私有方法。

public function get label():String
{
    return _label;
}

public function set label(value:String):void
{
   setLabel(value);
}

private function setLabel(value:String):void
{
     if(value == "") {
         // do something
     } else {
         _label = value;
         remeasureComponent(); // or whatever
     }
}               

3)它内置于语言中,因此请使用它。 另外,object.label = "Bla"object.setLabel("Bla")

更好看