我在加载的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;
}
答案 0 :(得分:5)
使用事件实现Flex数据绑定。当您使用BindingUtils.bindProperty时,幕后发生的事情是将事件侦听器添加到目标对象以侦听PropertyChangeEvent类型的事件
如果目标对象在更改时没有调度PropertyChangeEvent,则永远不会触发绑定。
当您将[Bindable]属性添加到Flex中的属性时,您正在做的是告诉框架在更改该属性时调度PropertyChangeEvent。如果您不包含该属性(或将其放在类上),则不会调度该事件并且不会发生绑定。
这就是为什么你的绑定工作从Flex到Flash而不是相反的方式 - Flex对象在更改时调度所需的事件但闪存对象不是。
的信息就个人而言,对于Flash - > Flex我会在flash部件更改其值并使用处理程序更新Flex部件中的可绑定对象时调度我自己的事件。然后,您可以绑定其他Flex内容。