2009-07-27 80 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")