2010-02-04 3 views
0

par curiosité j'ai décidé d'expérimenter ce qui suit dans un projet Flex 4:ActionScript 3 champ constructeur question

public class MyGroup extends Group 
{  
    public function MyGroup() 
    { 
     super(); 
     var myLabel:Label = new Label(); 
     myLabel.id = "myLabel"; 
     myLabel.text = "My label!"; 
     this.addElement(myLabel); 
    } etc. 

Ce composant personnalisé fait ce que je pense; cela ressemble à un contrôle d'étiquette avec text = "My label!". Question: existe-t-il un moyen de référencer le contrôle d'étiquette myLabel (par exemple pour changer le texte) ailleurs dans le projet?

Pour l'instant, la seule façon de parvenir au contrôle d'étiquette interne est d'appeler quelque chose comme myGroup.getElementAt (0).

Je me rends compte qu'il serait plus logique d'avoir l'étiquette une variable de classe - Je me demande comment ce code fonctionne.

Répondre

2

Vous pouvez faire un setter public de changer vous étiquette de texte:

public class MyGroup extends Group 
{ 
    private var _label:Label=new Label(); 

    public function set label(value:String):void{ 
     _label.text=value; 
    } 

    public function MyGroup() 
    { 
     super(); 
     _label.id = "myLabel"; 
     label = "My label!"; 
     addElement(_label); 
    } 
..... 
} 

var myGroup:MyGroup=.. 
myGroup.label="Hello"; 

Dans votre cas, puisque vous déclarez votre varmyLabel dans un function, ce champ d » action ne s'appliquera dans cette function

0

En ActionScript, les variables sont des poignées nommées que vous pouvez utiliser pour obtenir des objets et des données. Les variables ont quelque chose appelé scope, qui spécifie dans quelles parties du code le handle est valide. Lorsque vous créez une variable dans une fonction, sa portée est cette fonction. C'est-à-dire que ce pseudonyme n'est utilisable que dans cette fonction.

Dans votre code, vous créez un handle appelé myLabel et vous y ajoutez un Label - appelons-le Label123. Ensuite, vous mettez Label123 dans la liste des éléments de MyGroup, qui donne MyGroup une poignée fixée à Label123. Ensuite, la fonction se termine et le handle appelé myLabel n'est plus utilisable. Label123 existe toujours, car MyGroup a un handle pour cela.

Si vous créez myLabel comme une variable de classe private ou protected, cette poignée sera utilisable de toute fonction à l'intérieur MyGroup. Si vous créez comme une variable de classe public, il sera utilisable partout dans MyGroup, et aussi partout dans le code que vous avez une instance de MyGroup. (Et si vous créez comme une variable de classe internal, il sera utilisable partout à l'intérieur du paquet MyGroup est en.)