既然沒有人說這個呢,我就提出了第二種方法。
在Flex框架每個屬性將派遣一個屬性名字類似*財產*改變。其中財產要更改的屬性的名稱。所述屬性使用其他人已經提到的get set方法來實現。類似這樣的:
private var _myProperty:MyType;
[Bindable(myPropertyChanged)]
public function get myProperty():MyType
{
return _myProperty;
}
public function set myProperty(value:MyType):void
{
_myProperty = value;
dispatchEvent(new Event('myPropertyChanged'));
}
這些在Bindable元數據中指定的事件名稱用於綁定目的。因此,而不是調用裏面的設置你的方法,你可以偵聽此事件myPropertyChanged:
component.addEventListener('myPropertyChanged',onMyPropertyChanged)
代碼
和其他地方:
protected function onMyPropertyChanged(event:Event):void{
// do other processing
}
這可能是矯枉過正你要什麼完成;或不。既然你沒有詳細說明你想要完成什麼,我不確定。
如果您的新的功能涉及到Flex組件的生命週期以某種方式,如改變顯示或你應該執行生命週期中的編制方法的更改的大小;不在你設定的方法中。事情是這樣的:
private var _myProperty:MyType;
private var _myPropertyChanged:Boolean = false
[Bindable('myPropertyChanged')]
public function get myProperty():MyType
{
return _myProperty;
}
public function set myProperty(value:MyType):void
{
_myProperty = value;
_myPropertyChanged = true;
invalidateProperties();
invalidateDisplayList();
invalidateSize()
invalidateSkinState(); // spark comps only
dispatchEvent(new Event('myPropertyChanged'));
}
的無效方法將強制組件的生命週期方法的下一個渲染事件中重新運行,你可以在相關的方法使用這樣的代碼:
if(_myPropertyChanged == true){
_myPropertyChanged = false;
// do other processing
}
希望你不要介意我的編輯:)雖然很好的答案! – blong 2011-05-12 15:18:00
@Brian L我投票拒絕編輯。使整個類可以綁定會起作用,但在許多情況下,我認爲這是一種不好的做法。任何給定類別的許多屬性很可能不需要被製作爲可綁定;那爲什麼要在代碼中添加它們呢? – JeffryHouser 2011-05-12 15:28:23
@ www.Flextras.com這是可以理解的,我想你是對的。它確實是有道理的,_best practice_將只標記需要的字段'[Bindable]'。雖然,我確實想向提問者(@DaveC)指出綁定整個班級的選項。 – blong 2011-05-12 15:36:59