2011-08-26 22 views
2

我有这样的代码:如何删除Flex 4.5中的绑定?

BindingUtils.bindProperty(trollImage, "width", vslider, "value"); 
BindingUtils.bindProperty(trollImage, "height", vslider, "value"); 

和aproppriate组件都写在MXML:

<s:Image id="trollImage" source="http://clansql.comoj.com/meme/trollface-square.png"/> 
<s:VSlider id="vslider" height="400" maximum="600" minimum="5" value="400"/> 

创建通过按键绑定。当我按下另一个按钮后,绑定应该被删除。

我找到了一个Flex 3.5的解决方案here,但是这对Flex 4.5不起作用,因为这些组件没有_bindings属性。 Flex 4.5中的内容如何?有人可以告诉我吗?

非常感谢!

回答

5

无论如何,这个Flex 3.5解决方案对我来说看起来非常讨厌。您可以使用ChangeWatcher#unWatch()BindingUtils#bindProperty()函数返回ChangeWatcher的一个实例。

在你的情况会导致这样的事情:

var widthWatcher:ChangeWatcher = 
    BindingUtils.bindProperty(trollImage, "width", vslider, "value"); 
var heightWatcher:ChangeWatcher = 
    BindingUtils.bindProperty(trollImage, "height", vslider, "value"); 

widthWatcher.unWatch(); 
heightWatcher.unWatch(); 
+0

非常感谢!这无疑是我正在寻找的东西。 –

2

根据the documentationBindingUtils.bindProperty()回报ChangeWatcher instance你应该使用它摧毁绑定。伪代码如下所示:

private var trollImageWidthWatcher:ChangeWatcher; 
private var trollImageHeightWatcher:ChangeWatcher; 

private function firstButtonClickHandler(event:MouseEvent):void 
{ 
    trollImageWidthWatcher = BindingUtils.bindProperty(trollImage, "width", vslider, "value"); 
    trollImageHeightWatcher = BindingUtils.bindProperty(trollImage, "height", vslider, "value"); 
} 

private function secondButtonClickHandler(event:MouseEvent):void 
{ 
    trollImageWidthWatcher.unwatch(); 
    trollImageHeightWatcher.unwatch(); 
}