为什么BindingUtils.bindProperty()不能立即工作?

时间:2010-07-08 08:50:47

标签: flex

我在加载的flash文件和flex中的主应用程序之间有双向绑定。

    BindingUtils.bindProperty(this, "micGainValue", audioPublisherApp, "micVolume");
    BindingUtils.bindProperty(audioPublisherApp, "micVolume", this, "micGainValue");
    micGainValue=75;

但是,micGainValue的设置不会在flash文件中设置micVolume。我改为尝试在200帧之后设置micGainValue,现在它确实设置了micVolume。有没有办法测试这些属性是否绑定,因此设置后的值?

编辑:

Flash文件实际上是在改变值。现在的问题是,为什么设置micVolume不会改变micGainValue。

这是我加载的flash文件中的代码:

[Bindable]

    public function get micVolume():Number{
        if(microphone!=null)
            return microphone.gain;
        return 0;
    }

    public function set micVolume(val:Number):void{
        if(microphone!=null)
            microphone.gain=val;
    }

public function get micVolume():Number{ if(microphone!=null) return microphone.gain; return 0; } public function set micVolume(val:Number):void{ if(microphone!=null) microphone.gain=val; }

1 个答案:

答案 0 :(得分:5)

使用事件实现Flex数据绑定。当您使用BindingUtils.bindProperty时,幕后发生的事情是将事件侦听器添加到目标对象以侦听PropertyChangeEvent类型的事件

如果目标对象在更改时没有调度PropertyChangeEvent,则永远不会触发绑定。

当您将[Bindable]属性添加到Flex中的属性时,您正在做的是告诉框架在更改该属性时调度PropertyChangeEvent。如果您不包含该属性(或将其放在类上),则不会调度该事件并且不会发生绑定。

这就是为什么你的绑定工作从Flex到Flash而不是相反的方式 - Flex对象在更改时调度所需的事件但闪存对象不是。

以下是PropertyChangeEvent

的信息

就个人而言,对于Flash - > Flex我会在flash部件更改其值并使用处理程序更新Flex部件中的可绑定对象时调度我自己的事件。然后,您可以绑定其他Flex内容。