2010-02-04 3 views
0

из любопытства я решил поэкспериментировать со следующим в проекте в Flex 4:ActionScript 3 конструктор сфера вопрос

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. 

Этот пользовательский компонент делает то, что я ожидал; он выглядит как элемент управления ярлыком с текстом = «Мой ярлык!».

Вопрос: есть ли способ ссылаться на элемент управления меткой myLabel (например, изменить текст) в другом месте проекта?

В настоящий момент единственный способ, которым я могу добраться до внутреннего управления меткой, - это вызвать что-то вроде myGroup.getElementAt (0).

Я понимаю, что было бы разумнее, чтобы метка была переменной класса - мне просто интересно, как работает этот код.

ответ

2

Вы можете сделать публичный сеттер изменить вам текстовую метку:

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"; 

В вашем случае, поскольку вы объявляете varmyLabel внутри function, это ей объем будет применяться только внутри этого function

0

В ActionScript переменные называются дескрипторами, которые можно использовать для получения объектов и данных. Переменные имеют что-то под названием scope, которое указывает, в каких частях кода дескриптор действителен.

Когда вы создаете переменную внутри функции, ее область действия - это функция. То есть этот конкретный именованный дескриптор можно использовать только внутри этой функции.

В вашем коде вы создаете ручку с именем myLabel и помещаете в нее Label - назовем ее Label123. Затем вы положите Label123 в список элементов MyGroup, который дает MyGroup ручку, прикрепленную к Label123. Затем функция заканчивается, и дескриптор, называемый myLabel, больше не используется. Label123 все еще существует, потому что MyGroup имеет ручку к нему.

Если вы создаете myLabel как переменный класс private или protected, что ручка будет использоваться из любой функции внутри MyGroup. Если вы создадите его как переменную класса public, он будет использоваться в любом месте внутри MyGroup, а также в любом месте кода у вас есть экземпляр MyGroup. (И если вы создадите его как переменную класса internal, он будет использоваться в любом месте внутри пакета MyGroup.)

Смежные вопросы