![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
А если кнопок будет много ( как например калькулятор ) это Вы предлагаете для каждой писать слушателя, в место наследования от класса у которого всё уже прописано? я не согласен.
|
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Ну так вы же в итоге всё равно подписываетесь, только на другое событие.
Цитата:
|
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
udaaff Спасибо за обьяснения!
Хотя ещё можно и destroy сразу вызывать. package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.events.Event; public class Main extends Sprite { public function Main() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); new AppConfig(this); } } } package { import flash.display.DisplayObjectContainer; public class AppConfig { private var _doc:DisplayObjectContainer; private var _view:MainView; public function AppConfig(doc:DisplayObjectContainer) { //сохраняем ссылку на DisplayObjectContainer _doc = doc; //создаём главный класс отображения _view = new MainView(); //добавляем его в DisplayObjectContainer _doc.addChild(_view); } } } package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class MainView extends Sprite { private var _button:Button; private const DESTROY:uint = 0xA7A7A7; public function MainView() { _button = new Button(); _button.addEventListener(MouseEvent.MOUSE_DOWN, button_mouseDownHandler); _button.id = DESTROY; _button.x = _button.y = 100; this.addChild(_button); } private function button_mouseDownHandler(event:MouseEvent):void { if (event.target.id == DESTROY) this.destroy(); } private function destroy():void { super.removeChildren(); } } } package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class Button extends Sprite { private var _id:uint; public function Button() { super(); if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(event:Event=null):void { removeEventListener(Event.ADDED_TO_STAGE, init); super.graphics.beginFill(0x000000); super.graphics.drawRect(0, 0, 70, 45); super.graphics.endFill(); } public function get id():uint { return _id; } public function set id(value:uint):void { _id = value; } } } |
|
|||||
|
Регистрация: Mar 2013
Сообщений: 290
|
Wolsh, ясно, значит обращение вверх по иерархии вообще ересь, и нужно менять архитектуру.
Akopalipsis, о как интересно, благодарю за пример. Чуть позже попробую протестировать, но уже при беглом осмотре имеется пара вопросов. Но пока только хотел спросить, а что это за подход такой с MainView, почему вы его в диалоге с udaff использовали как отдельный термин? Это часть какого-то Паттерна? Может у вас тут вообще MVC реализовано. |
|
|||||
|
[+1 25.10.13]
[+4 18.03.14] |
Обращение вверх по иерархии не ересь. Допустим если у вас одинаковое содержимое в разных контейнерах. Я для этих целей использую сами знаете что.
|
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
отображение, он создаёт и обрабатывает только визуальные обьекты. Когда мне в первые показали такой вариант, то я его боялся и не использовал очень долго. Но сейчас я не даже представить не могу, что буду использовать другую реализацию. Цитата:
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Мало того, если _button член класса, как в данном коде, id вообще не нужен. И не заводите привычку подписывать кнопки на даун. Только клик. Юзер должен иметь возможность передумать.
__________________
Reality.getBounds(this); |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Вот я и говорю, что destroy можно сделать слушателем.
|
|
|||||
|
[+1 25.10.13]
[+4 18.03.14] |
У меня есть dict[node.@id]=class
|
|
|||||
|
Регистрация: Mar 2013
Сообщений: 290
|
Akopalipsis, разбираю ваш пример, идея прикольная, но и вопросов много )
1. Зачем здесь прописывать дефолтный null, это чем то лучше, чем оставить просто e:Event? А разве по умолчанию оно и не будет равно null? Или тут есть какой-то ньюанс... 2. Как доступно для нуба озвучить смысл сего оператора? Я понимаю его так: Создать экземпляр класса AppConfig и передать ему экземпляр класса Main. Правильно ли это? И кстати, это пример Композиции? Видимо это пример "Недокомпозиции", так сказать... Ведь мы этот оператор не присваиваем никакой переменной, то есть экземпляр завис в воздухе. 3. Правильно ли я понимаю, что по сути мы сейчас добавили экземпляр класса MainView в экземпляр класса Main? И именно для этого писали new AppConfig(this); то есть передача через конструктор обязательна. И по другому нельзя. 4. Сначала я было подумал, что мы будем юзать некий системный класс Button, потому что это слово подсвечивается. Однако потом увидел, что ваш четвертый класс имеет такое же имя... Это смущает. То есть, выходит, создав свой класс Button мы как бы оттенили системный класс с таким же именем. Этакий классовый оверрайд? 5. А вот этот .id - это что за свойство, оно же не было ранее объявлено нигде. Или это какой-то трюк, типа, мы можем налету присобачить к экземпляру любые свойства? 6. Хм, как-то цельное понимание не складывается. То есть мы сделали следующее: Применили к текущему экземпляру класса MainView метод destroy, который обратился к экземпляру класса выше (то есть super. это ссылка на Main, ведь так?), и удалил всех его детей. Выходит, это всё равносильно записи: this.super.removeChildren(); 7. Не понимаю, что здесь делает super(); Он вызывает конструктор системного класса Sprite, но... что это дает? Это равносильно записи new Sprite(); так чтоли? Но даже если так, то экземпляр завис в воздухе, и мы его потеряли. Тогда "... зачем ей все шелка?" (с) 8. Функции get и set, в связке со свойством _id, они несут какую-то функциональность в данном примере? Похоже что нет... Видимо добавлены для "цельности концепций", поправьте, если это не так. 9. Вы проверяли этот проект на работоспособность? А то при запуске я получаю одну ошибку: Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 14:38. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| видимость , классы , композиция , методы , свойства |
|
|