2009-12-01 84 views
0

我有這樣的課。屬性「isPag」基於提交的「ecboardid」,我發現當ecboardid發生變化時,UI控件似乎無法檢測到「isPag」也發生了變化。那麼,如何讓這樣的屬性可以綁定?如何使屬性可綁定?

[Bindable] 
public class Encoder extends EventDispatcher 
{ 
    public var ecboardid : String; 

    /*-.........................................Methods..........................................*/ 
    public function copyFrom(newEncoder:Encoder):void 
    { 
     ecboardid = newEncoder.ecboardid; 
     this.dispatchEvent(new Event('isPagChanged')); 
    } 

    [Bindable (event="isPagChanged")] 
    public function get isPag():Boolean 
    { 
     if(this.ecboardid != null) 
     { 
      if(this.ecboardid.search('xxx') != -1) 
      { 
       return false; 
      } 

      return true;     
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

編輯:

如果我的屬性更改爲靜態函數,

[Bindable] 
public class Encoder extends EventDispatcher 
{ 
    public var ecboardid : String; 

    /*-.........................................Methods..........................................*/ 
    public function copyFrom(newEncoder:Encoder):void 
    { 
     ecboardid = newEncoder.ecboardid; 
     this.dispatchEvent(new Event('isPagChanged')); 
    } 

    public static function isPag(String ecboardid):Boolean 
    { 
     if(ecboardid != null) 
     { 
      if(ecboardid.search('xxx') != -1) 
      { 
       return false; 
      } 

      return true;     
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

將綁定這樣的:

visible = {Encoder.isPag(encoder.ecboardid)} 

工作? encoder.ecboardid更改時可見變化嗎?

回答

0

我不相信你可以使只讀屬性Bindable,因爲Flex使用調用setter方法爲屬性發出更改事件。看看here關於綁定到對象屬性的部分。

0

你需要有一個setter和一個getter。

另外,如果您沒有指定事件名稱,那麼您將類標記爲可綁定的,那麼方法中的[Bindable]將是多餘的。

visible = {Encoder.isPag(encoder.ecboardid)} 

並不怎麼綁定工作:

通常,如果你只有一個getter和沒有setter,並嘗試將其標記爲[綁定]

這樣的代碼編譯器會抱怨。 {var}符號用於MXML。 isPag不是靜態的,所以你不能把它作爲一個類屬性來引用。您需要一個Encoder類的實例才能合法。

0

這是一個簡單的改變 - 只是創建getter/setter方法,並在二傳調度的變化事件(修改完畢),像這樣:

private var _ecboardid : String; 


    public function get ecboardid():String 
    { 
     return _ecboardid; 
    } 

    public function set ecboardid(value:String):void 
    { 
     _ecboardid = value; 
     this.dispatchEvent(new Event('isPagChanged'));  
    }