2009-09-08 222 views
0

在我的flex應用程序中,我有一個公共可綁定屬性。 我希望它每次該屬性的值發生變化時都會觸發一個函數。 我嘗試使用ChangeWatchers,但它似乎只適用於像文本框更改內置組件。 我想要在運行時更改屬性的相同行爲。觀察可綁定屬性

回答

2

一種選擇是使用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屬性更改。當然,還有其他的方法,但我經常使用這種方法取得好的效果。希望能幫助到你!回覆問題,我會留意。

0

好吧,最簡單的方法是聽PropertyChangeEvent.PROPERTY_CHANGE ......如果你聲明一個可綁定的屬性,那麼mxmlc會生成代碼來分派這個事件......如果你讓編譯器保留生成的ActionScript,那麼你會看到它... ...

除此之外,你可能想看看BindingUtils ...

0

查找到BindUtils類作爲back2dos建議。

而且,還可以設置當一個變化是爲了一個屬性,將觸發該事件的名稱(默認爲爲propertyChange)這樣的:

[Bindable("change")] 
var myProperty : SomeClass; 

也就是說,如果ChangeWatchers增加偵聽器更改事件而不是propertyChange事件。這將是一種奇怪的,但並非不可能的所有flex SDK的不幸。

但是,我認爲BindUtils類應該爲你做好訣竅。

0

使用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);
} } }