2009-12-01 8 views
0

J'ai un cours comme celui-ci. La propriété "isPag" est basée sur le fichier "ecboardid", j'ai trouvé que lorsque l'ecboardid est modifié, les contrôles de l'interface utilisateur ne semblent pas capables de détecter que "isPag" est également modifié. Alors, comment faire une propriété comme celle-ci?Comment rendre une propriété lisible?

[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; 
     } 
    } 
} 

Edit:

Si je change la propriété à une fonction statique,

[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; 
     } 
    } 
} 

lierez comme ceci:

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

travail? Est-ce que le changement visible changera quand encoder.ecboardid changera?

Répondre

0

Je ne crois pas que vous pouvez créer des propriétés en lecture seule Bindable, car Flex utilise des appels à la méthode setter pour qu'une propriété émette les événements de modification. Jetez un oeil here à la section sur la liaison aux propriétés des objets.

0

Vous devez avoir un setter ainsi qu'un getter.

De plus, vous avez la classe marquée comme lisible, si vous ne spécifiez pas le nom de l'événement, alors [Bindable] sur la méthode serait redondant.

Habituellement, le compilateur se plaint si vous avez juste un getter et aucun poseur et essayer de marquer [Bindable]

code comme ceci:

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

est-ce pas la façon dont fonctionne de liaison. La notation {var} est à utiliser dans MXML. Et isPag n'est pas statique, vous ne pouvez donc pas vous y référer en tant que propriété de classe. Vous avez besoin d'une instance de la classe Encoder pour que cela soit légal.

0

Ceci est un simple changement - il suffit de créer getters/setters et expédier votre événement de changement dans le setter (après avoir changé la valeur), comme ceci:

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'));  
    } 
Questions connexes