2009-07-27 57 views

回答

6

曝光使用或者低于被认为是最好的做法在Flex方法的可绑定公共财产:

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

的get/set函数对是一个更灵活一点然后定期的公共财产。通过使用[Bindable]标签注释get函数,您仍然可以轻松地使该属性可绑定。但是,您可以在“设置”功能中实现一些自定义逻辑,包括设置脏标志和使属性,尺寸或显示列表无效。例如:

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框架组件中大量使用。失效模型非常干净,并且还可以在自定义组件中实现最佳性能。

您还可以指定绑定属性自定义事件,以便您可以触发其从多个地方结合,而不是仅仅通过调用设置:

[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”方法。

+0

好的答案谢谢 – 2009-07-28 09:42:16

0

在大多数情况下,性能是几个原因更好:

1)可以很容易在MXML中设置属性。例如:

<mx:Button label="Bla"> 

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

2)属性与setters和getters基本相同。 当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")