Вопрос о конструкторе ActionScript 3 - PullRequest
0 голосов
/ 04 февраля 2010

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

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 ]

2 голосов
/ 04 февраля 2010

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

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

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

0 голосов
/ 04 февраля 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...