观察可绑定属性

问题描述:

在我的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);
} } }