2011-03-30 29 views
1

我想在setter調用之後調用一個自定義函數。你有好主意嗎 ? 具有PROPERTY_CHANGE偵聽器的變量的ObjectProxy是唯一的方法?什麼是最好的方式來「聆聽」二傳手?

感謝

+0

是二傳手你已經創建了一個類的一部分,或現有的類? – Chris 2011-03-30 07:46:19

+0

二傳手是我創建的類的一部分。 – 2011-03-30 08:30:04

+0

爲什麼不能在setter函數中調用函數?我不明白你的問題......一些代碼會有幫助。 – 2011-03-30 16:13:46

回答

1

從你的類擴展EventDispatcher,然後在設定的方法簡單地分派事件。

class MyClass extends EventDispatcher { 
    public static const PROPERTY_CHANGED:String = "PROPERTY_CHANGED"; 

    private _foo:Number = 0; 

    public function MyClass() { } 

    // else where 
    public function set foo(value:Number):void { 
     _foo = value; 
     dispatchEvent(new Event(PROPERTY_CHANGED)); 
    } 


} 
+0

剛剛提交你的答案,當我要提交我的;) – goliatone 2011-03-30 09:06:57

+0

@ goliatone - 對不起隊友!我討厭什麼時候會發生這種情況,可惜你不能從問題中分出聲譽。 – Chris 2011-03-30 09:10:03

+0

Hehehe,別擔心 – goliatone 2011-03-30 09:39:34

1

其實我更喜歡,我認爲這是一個有點聲明和清潔的機制:

[Bindable] 
public class MyClass 
{ 
    public var foo:Number; 

    public function MyClass() { 
     BindingUtils.bindSetter(whenFooIsSet, this, "foo"); 
    } 

    private function whenFooIsSet(newValue:Number) { 
    } 
} 
+0

只需注意,如果您正在開發Flex應用程序,這將僅適用。同樣爲了清晰起見,[Bindable]默認爲= [Bindalbe(event =「propertyChange」)]:http://livedocs.adobe.com/flex/3/html/help.html?content=databinding_8.html – 2011-03-30 20:13:36

+0

@Stephen Bailey:同意,這隻適用於Flex ...但這個問題被標記爲Flex。 – 2011-03-31 00:18:48

+0

啊是的*臉紅*。對於新開發人員來說,瀏覽答案純粹AS3和flex之間的界限是令人生畏的,因爲他們使用FlexSDK - 所以也許它仍然可以幫助某人。 – 2011-03-31 05:09:57

相關問題