观察可绑定属性
在我的flex应用程序中,我有一个公共可绑定属性。 我希望它每次该属性的值发生变化时都会触发一个函数。 我尝试使用ChangeWatchers,但它似乎只适用于像文本框更改内置组件。 我想要在运行时更改属性的相同行为。观察可绑定属性
一种选择是使用BindingUtils.bindSetter
(顺带返回返回ChangeWatcher):
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="this_creationComplete()">
<mx:Script>
<![CDATA[
import mx.binding.utils.BindingUtils;
import mx.binding.utils.ChangeWatcher;
[Bindable]
public var myValue:int = 0;
private function this_creationComplete():void
{
var cw:ChangeWatcher = BindingUtils.bindSetter(myValueChanged, this, "myValue");
}
private function setValue():void
{
myValue = getTimer();
}
private function myValueChanged(o:Object):void
{
trace("myValue: " + myValue.toString());
// You can also use o.toString() -- the new value will be passed into the function
}
]]>
</mx:Script>
<mx:Button label="Click Me" click="setValue()" />
</mx:Application>
这里,myValueChanged
被称为每当myValue
属性更改。当然,还有其他的方法,但我经常使用这种方法取得好的效果。希望能帮助到你!回复问题,我会留意。
好吧,最简单的方法是听PropertyChangeEvent.PROPERTY_CHANGE
......如果你声明一个可绑定的属性,那么mxmlc会生成代码来分派这个事件......如果你让编译器保留生成的ActionScript,那么你会看到它... ...
除此之外,你可能想看看BindingUtils
...
查找到BindUtils类作为back2dos建议。
而且,还可以设置当一个变化是为了一个属性,将触发该事件的名称(默认为为propertyChange)这样的:
[Bindable("change")]
var myProperty : SomeClass;
也就是说,如果ChangeWatchers增加侦听器更改事件而不是propertyChange事件。这将是一种奇怪的,但并非不可能的所有flex SDK的不幸。
但是,我认为BindUtils类应该为你做好诀窍。
使用ObjectProxy类或其子类并包装具有需要观察的属性的类。在我的例子,我打电话,如果有人更改属性的薪水给它的对象者超过55000的值FUNC:
包com.farata { 进口mx.utils.ObjectProxy; import flash.utils。*;
use namespace flash_proxy;
public dynamic class MyPersonProxy extends ObjectProxy
{
// The object to wrap up
private var person:Person;
public function MyPersonProxy(item:Person){
super(item);
person=item;
}
flash_proxy override function setProperty(name:*, value:*):void {
如果(名称== '薪水' & &值> 55000){// 一个新属性添加到 //类Person的该实例中,其可在计算 被用来//赔偿总额 setProperty(“pension”,0.02); } super.setProperty(name,value);
} } }