![]() |
|
|
|
|||||
![]() Привет всем.
Подскажите пожалуйста как сделать правильно. Есть класс ImageBox - некий контейнер, которому можно задавать размеры, в себя умеет загружать картинку и пустое место заполнять выбранным фоном. От этого класса будут производные классы. Например, класс ImageBoxExt - делает все тоже самое что и ImageBox, но еще при наведении должны внутри появляться кнопка корзины и чекбокс. Наследоваться от ImageBox? Проблема: в конструкторе после super добавляю кнопку корзины и чекбокс. Но после того как загружается основная картинка, она закрывает все новосозданные кнопки ) Следовательно, в этом классе нужно перекрывать родительские методы - а это неправильно. Либо просто создавать класс, наследуясь от Sprite и внутри создавать экземпляр класса ImageBox?
__________________
кто не отвечает, того garbage collector забирает Последний раз редактировалось djken; 15.05.2018 в 01:42. |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
|
|
|||||
Undefined, почему нужно перекрывать? Или почему это неправильно?
Перекрывать нужно, т.к. надо ловить момент загрузки картинки, что бы потом остальное дорисовывать сверху. Либо менять слои местами. Следовательно, нужны изменения в методах родительского класса. А неправильно, т.к. это нарушение инкапсуляции..
__________________
кто не отвечает, того garbage collector забирает |
|
|||||
Цитата:
Цитата:
Если изначально планируется, что в базовом классе грузится какая-то картинка, а объекты дочерних классов должны знать об этом, то и архитектуру родительского класса надо делать сразу с учетом этого. Если нужно дождаться загрузки картинки, то можно обработчику сделать модификатор protected и в дочернем классе просто его перезаписать // в базовом классе protected function onImageLoaded(e:Event):void { ... добавляется картинка } // в наследнике override protected function onImageLoaded(e:Event):void { super.onImageLoaded(e); .. тут добавляешь свои чекбоксы } как-то так
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
caseyryan, спасибо большое!
Для личного пользования всегда обходился только private и public. Но в данном случае не хотелось использовать public у родительского метода для перезаписи в наследнике, т.к. onImageLoaded не относится к интерфейсу данного класса. Теперь буду знать про protected ) Цитата:
__________________
кто не отвечает, того garbage collector забирает |
|
|||||
Цитата:
Цитата:
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
А, ну у меня в родительском методе вконце стоит диспатч события после загрузки картинки.
Получается я могу его так же в наследнике слушать.. я что-то не додумался сразу до этого ) super.addEventListener('COMPLETE', onCompleteHandler); ... private function onComplete(e:Event):void { var _cb:CheckBox = new CheckBox(); addChild(_cb); } Пасиб! )
__________________
кто не отвечает, того garbage collector забирает |
|
|||||
Цитата:
Во-вторых, для события complete есть штатная константа Event.COMPLETE, даже свою объявлять не надо Ну и в третьих - отправка события - это всегда более ресурсоемкий способ, чем вызов метода. У тетя там и так событие приходит при загрузке картинки. Создавать еще одно - это оверхэд. Оверрайд в данном случае более правильный подход. Не нужно ни слушателей дополнительных ни событий и всё по ООПшному А если событие все-таки нужно для чего-то ещё, то ты можешь не создавать новое, а просто передиспатчить то же
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 02:49. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|