|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jul 2013
Адрес: Каскелен
Сообщений: 86
|
как правильно получать ссылку на Main из вложенного в него DOCa
никак не могу понять этот основной момент ООП :\ как получать доступ к методам вложенных объектов - понятно, а из вложенных объектов как получить ссылку на parent - не могу полностью понять...
в document-классе создаю объекты-контейнеры, из которых нужно вызывать метод document-класса: public class Main extends Sprite { public var floatingCont:FloatingCont; private var _chapters:Chapters; private var _codeExamples:CodeExamples; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } public function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); _chapters = new Chapters(); addChild(_chapters); addChild(_codeExamples = new CodeExamples()); _codeExamples.x = 300; } public function fullFillFloatingCont(obj:FloatingCont):void { if (floatingCont) { removeChild(floatingCont); } floatingCont = new FloatingCont(); floatingCont = obj; addChild(floatingCont); } } } public class Chapters extends Sprite { private var _button1:Button; private var _button2:Button; private var _floatingCont:FloatingCont; public function Chapters() { _button1 = new Button("кнопка1"); _button2 = new Button("кнопка2"); _button2.y = 200; addChild(_button1); addChild(_button2); _button1.addEventListener(MouseEvent.CLICK, clickListener); _button2.addEventListener(MouseEvent.CLICK, clickListener); } private function clickListener(e:MouseEvent):void { switch(e.currentTarget) { case _button1: (root as Main).fullFillFloatingCont(new FloatingCont("C://Arrays.as")); break; case _button2: (root as Main).fullFillFloatingCont(new FloatingCont("C://AVScanner.ini")); break; } } } } пробовал в поле класса писать что-то типа _main:Main - вообще виснет приложение от такого |
|
|||||
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Цитата:
Лучше диспатчить из чилда события и в родителе отлавливать их. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Зачем Вы создаете экземпляр FloatingCont и записываете его в переменную, в которую следующим действием записываете obj?
И зачем Вам "другая ссылка" на мейн? Чем эта не устраивает?
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Jul 2013
Адрес: Каскелен
Сообщений: 86
|
например, вместо этого я напишу dispatchEvent("someEvent");
в Main поставлю слушатель на "someEvent" и запущу функцию fullFillFloatingCont, а как передам туда параметры тогда? Добавлено через 2 минуты т.к. говорили, что так неправильно делать Добавлено через 5 минут Цитата:
Добавлено через 8 минут а, да, если убрать _floatingCont = new FloatingCont() то тоже работает, только я тогда не совсем понимаю как... в каком месте выполнилось new FloatinCont()? в классе _chapters значит? |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Для того, чтобы объект создался, технически достаточно написать new FloatingCont(); и всё. Оператор new создает экземпляр класса, указанного за ним, вызывая конструктор этого класса (то есть описанную в классе публичную функцию FloatingCont). А переменная _floatingCont создается оператором var. То есть сначала Вы создаете переменную ("объявляете переменную") и указываете ее тип
Всё, переменная создана. Но она "не инициализирована", то есть в нее не записано никакое значение, никакая ссылка. Если сейчас выполнить trace(floatingCont), то трейс выдаст undefined, то есть "не определена", или null. Но сама переменная есть. Вы можете записать в нее ссылку на объект класса FloatingCont (или его класса-наследника). Ссылка может быть либо взята из другой переменной (floatingCont = obj), либо получена как результат работы функции, если функция возвращает (return) значение именно этого типа FloatingCont. Например, конструктор определенно возвращает именно этот тип)) Поэтому запись floatingCont = new FloatingCont(); запишет в переменную ссылку на экземпляр класса FloatingCont — результат вызова оператора new. Добавлено через 6 минут Цитата:
Добавлено через 9 минут Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Jul 2013
Адрес: Каскелен
Сообщений: 86
|
понял, спасибо! буду пробовать...
но если так всё диспатчить и ловить в Main то там будет большая куча слушателей же, но пока попробую как будет, а потом буду думать как это всё сократить |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
|
Часовой пояс GMT +4, время: 16:05. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|