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

Как могут быть созданы экземпляры классов получить доступ к классу 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();
   }
}
[UX] Категории и настройки внешнего вида Flash-сообщений
[UX] Категории и настройки внешнего вида Flash-сообщений
Flash-сообщение - это обычный веб-элемент, используемый для отправки короткого сообщения пользователю. Например, на странице входа в систему может...
15
0
15 255
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

Ответ принят как подходящий

Вы можете использовать синглтон для своего класса документа (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();
    }
}

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

Действительно ли свойство instance () необходимо в главном классе? Я имею в виду, нельзя ли просто получить доступ к переменной-указателю "_instance"?

Robin Rodricks 17.12.2008 09:39

Это не синглтон, это скорее моносостояние.

Matt W 17.12.2008 18:52

Джереми: Функция свойства экземпляра просто гарантирует, что только класс Main может изменить частную переменную _instance. Обратите внимание, что сеттера нет. Мэтт: Спасибо, что просветили меня.

aaaidan 30.12.2008 04:26

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

Другие вопросы по теме