2010-08-20 123 views
0

我想添加一個派生屬性彎曲:依賴於數據綁定

private var a:int; 
private var b:int; 
[Bindable] 
public function get derived():int 
{ 
    return a+b; 
} 

然而,得到的將不會更新當我改變a或b。是否有更好(更快)的方式來進行派生更新比給予和B設置方法使其無效?

編輯:添加關鍵字「get」。我希望現在更有意義。

+0

哎呀,我看到我忘了 「得」。讓我編輯這個。 – 2010-08-20 20:15:39

回答

2

您的代碼不會創建屬性,它會創建一個方法。方法不能是Bindable,只能是屬性。這種方法應該爲你工作:

private var _a:int; 
public function get a():int{ 
return _a 
} 
public function set a(value:int):void{ 
    _a = a; 
    dispatchEvent(new Event('derivedChanged')); 
} 
private var _b:int; 
public function get b():int{ 
return _b 
} 
public function set b(value:int):void{ 
    _b = b; 
    dispatchEvent(new Event('derivedChanged')); 
} 

[Bindable(event="derivedChanged")] 
public function get derived():int 
{ 
    return a+b; 
} 

我寫了代碼n的瀏覽器;所以可能會有小的語法錯誤。

+0

對,這正是我目前的代碼。我想知道是否可以避免爲a和b添加get和set方法。 – 2010-08-20 20:14:09

+0

這不是你發佈的代碼。 ;)要在只讀屬性上觸發綁定,必須分派綁定事件。它不一定是a和b的設定方法,但這是最合乎邏輯的地方。 – JeffryHouser 2010-08-20 21:34:23

1

您可以在衍生函數上使用[Bindable(event="propertyChanged")]

你也應該讓你的派生函數成爲一個getter。

我應該工作,因爲flex使用PropertyChangeEvent.PROPERTY_CHANGE綁定變量,通過自動創建getter和setters並分派PropertyChangeEvent。修改a或b將自動使derived的結果無效。

0

我覺得這是一個常見問題,所以我寫了一些代碼來幫助它。您可以在Bindable元數據中添加吸氣劑依賴的內容。所以:

[可綁定(事件= 「derivedChanged」,dependentProperty = 「A」)] [可綁定(事件= 「derivedChanged」,dependentProperty = 「B」)] 公共函數得到衍生的():整數 { 返回a + b; }

它是自定義代碼,用Parsley的元數據處理編寫,但是你可以在沒有Parsley的情況下使用它 - 它只是一個普通的方法調用,看起來不會很好。

檢查出來:http://frishy.blogspot.com/2011/06/binding-dependencies.html

-Ryan