Доступ к классу Document в AS3 - PullRequest
       21

Доступ к классу Document в AS3

15 голосов
/ 16 декабря 2008

Как экземпляры класса могут получить доступ к классу Document?

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

Одно решение всегда приведение класса Document к себе! Например.

Main(Main).globalMethod();

Но иногда даже эта звездная гоча терпит неудачу, и тогда обычно нет выхода, кроме очевидного!

class Other{

   var parentClass:Main;
   public function Other(parent:Main){
       parentClass = parent;            // pointer to the Main class in a local var!

       Main(parentClass).globalMethod();
   }
}

Ответы [ 3 ]

22 голосов
/ 17 декабря 2008

Вы можете использовать синглтон для вашего класса документов (Main, в вашем примере), который позволяет вам получить доступ к экземпляру из любого места.

public class Main extends Sprite {
    private static var _instance:Main;
    public static function get instance():Main { return _instance; }

    public function Main() {
        _instance = this;
       // etc...
    }

    // etc...
}

Затем вы получаете доступ к экземпляру Main следующим образом:

public class Other {
    public function Other() {
        Main.instance.usefulInstanceMethod();
    }
}

Класс документа является довольно хорошим кандидатом для одноэлементного шаблона, поскольку обычно должен быть доступен только экземпляр.

4 голосов
/ 18 декабря 2008

Просто примечание, но самый короткий ответ на этот вопрос: так же, как любой класс обращается к любому другому классу. То есть с прямой ссылкой или статическим воздействием. В этом отношении класс документа ничем не отличается от любого другого класса.

4 голосов
/ 16 декабря 2008

Класс документа по своей природе не является глобально доступным объектом. Если вы хотите вызывать методы, которые находятся в классе документа, вы всегда должны передавать ссылку из Main в любые другие классы / объекты, которые хотят вызывать его методы. Более объектно-ориентированный подход будет состоять в том, чтобы отправлять события из других ваших классов (Other) в класс Main для прослушивания и вызова соответствующего метода самого по себе.

Если вас не интересует сохранение хорошей структуры ООП и вы хотите получить доступ к классу документа из экранного объекта, который был добавлен в список отображения, вы можете попробовать что-то вроде: stage.getChildAt( 0 );

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