2011-03-30 171 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

相关问题