Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.09.2015, 08:26
nelco вне форума Посмотреть профиль Отправить личное сообщение для nelco Найти все сообщения от nelco
  № 1  
Ответить с цитированием
nelco
 
Аватар для nelco

Регистрация: Jul 2013
Адрес: Каскелен
Сообщений: 86
По умолчанию как удалить нажав на кнопку весь экземпляр класса, в котором находится эта кнопка

создаю в основном классе
Код AS3:
private var _floatingCont = new FloatingCont
объект этого класса, который содержит одну кнопку:

Код AS3:
public class FloatingCont extends Sprite
	{
		public var _closeButton:Button = new Button("закрыть");
 
		public function FloatingCont()
		{	
			addChild(_closeButton);
			_closeButton.addEventListener(MouseEvent.CLICK, closeButtonLstner);
 
		}
 
		private function closeButtonLstner(e:MouseEvent):void 
		{
			this.parent.removeChildAt(1); 
		}
 
	}
 
}
мне нужно, чтобы при нажатии на эту кнопку удалялся этот объект _floatingCont, т.е. кнопка и функция от кнопки - получается, внутри этого объекта, который нужно удалить.
parent.removeChildAt(1) удаляет, но нужно чтобы можно было указывать само имя объекта _floatingCont... parent.removeChild(_floatingCont) как-нибудь так
или как мне перенести слушатель от кнопки в класс-родитель? подскажите как правильно делают в таких случаях? кажется, так неправильно


Последний раз редактировалось nelco; 14.09.2015 в 11:03.
Старый 14.09.2015, 13:22
amesqit вне форума Посмотреть профиль Отправить личное сообщение для amesqit Найти все сообщения от amesqit
  № 2  
Ответить с цитированием
amesqit
 
Аватар для amesqit

Регистрация: Oct 2007
Сообщений: 255
Записей в блоге: 1
Чем вас не устраивает удаление в основном классе, самому себя убивать классу не очень хорошая практика. Не он себя родил, не ему себя и убивать. Лучше сделать в классе FloatingCont деструктор и вызывать его из основного класса, его создавшего
Код AS3:
public class FloatingCont extends Sprite
	{
		public var _closeButton:Button = new Button("закрыть");
 
		public function FloatingCont()
		{	
			addChild(_closeButton);
			_closeButton.addEventListener(MouseEvent.CLICK, closeButtonLstner);
 
		}
 
		public function destroy():void
		{
			_closeButton.removeEventListener(MouseEvent.CLICK, closeButtonLstner);
		}
 
		private function closeButtonLstner(e:MouseEvent):void 
		{
			dispatchEvent(new Event("kill_me_please"))
		}
 
	}
 
}
а в основном классе
Код AS3:
		public function Main()
		{	
			_floatingCont = new FloatingCont()
			_floatingCont.addEventListener("kill_me_please", killHandler)
			addChild(floatingCont )
 
		}
		private function killHandler(e:Event):void
		{
			var target:FloatingCont = FloatingCont(e.target);
			target.destroy() 
			target.removeEventListener("kill_me_please", killHandler)
			removeChild(target)
		}
__________________
ответ прост: be || !be == true

Старый 14.09.2015, 13:47
nelco вне форума Посмотреть профиль Отправить личное сообщение для nelco Найти все сообщения от nelco
  № 3  
Ответить с цитированием
nelco
 
Аватар для nelco

Регистрация: Jul 2013
Адрес: Каскелен
Сообщений: 86
спасибо, понял, только через диспатчинг событий, получается? думал, что можно, может, из самого класса как-нибудь самого себя удалить правильно. как вы не путаетесь со всеми этими слушателями и ссылающимися друг на друга классами, я удивляюсь... :\ надеюсь, что у меня тоже так получится не путаться со временем, какой слушатель от чего и т.д. (ведь со временем этих всех объектов, слушателей - будет очень много в коде одного класса)

Старый 14.09.2015, 14:05
amesqit вне форума Посмотреть профиль Отправить личное сообщение для amesqit Найти все сообщения от amesqit
  № 4  
Ответить с цитированием
amesqit
 
Аватар для amesqit

Регистрация: Oct 2007
Сообщений: 255
Записей в блоге: 1
Это не правильно с точки зрения логики. У классов создателей могут быть свои планы, для какой-то цели они создали объект, ждут от него каких-то результатов деятельности, какие-то события, когда он им станет не нужен они должны от него избавиться, а тут он взял и сам себя убил, никому ничего не сказав. Так порядочные объекты не поступают. Для окончательного удаления объекта сборщиком мусора, нужно чтобы не было на него ссылок, сам объект не знает кто за ним следит, поэтому лучше чтобы он сказал о своем намерении убить себя, чтобы следящие за его поведением объекты смогли благополучно про него забыть.
__________________
ответ прост: be || !be == true

Старый 14.09.2015, 14:06
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 5  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
(ведь со временем этих всех объектов, слушателей - будет очень много в коде одного класса)
Что будет громким таким звоночком, что архитектура приложения неверна.
Цитата:
как вы не путаетесь со всеми этими слушателями и ссылающимися друг на друга классами
Собственно, вот это предложение уже в какой-то степени говорит о неправильной архитектуре, если все друг на друга ссылаются. Программа в идеальном идеале должна представлять собой дерево, где каждая веточка сообщает узлу о какой-то информации, узел либо отправляет эту информацию другому узлу на уровень выше, либо говорит другой своей веточке эту переданную и, возможно, как-то модифицированную информацию.
__________________
тут я

Старый 14.09.2015, 14:20
amesqit вне форума Посмотреть профиль Отправить личное сообщение для amesqit Найти все сообщения от amesqit
  № 6  
Ответить с цитированием
amesqit
 
Аватар для amesqit

Регистрация: Oct 2007
Сообщений: 255
Записей в блоге: 1
Цитата:
Сообщение от nelco Посмотреть сообщение
спасибо, понял, только через диспатчинг событий, получается? думал, что можно, может, из самого класса как-нибудь самого себя удалить правильно. как вы не путаетесь со всеми этими слушателями и ссылающимися друг на друга классами, я удивляюсь... :\ надеюсь, что у меня тоже так получится не путаться со временем, какой слушатель от чего и т.д. (ведь со временем этих всех объектов, слушателей - будет очень много в коде одного класса)
Классы минимально должны ссылаться друг на друга, и знать они должны ровно то что от них надо. Что-то вроде того, что есть Класс Машина, у машины есть колесо, колесо не знает на какой машине оно стоит, колесо может крутиться, а еще у него может лопнуть шина. Лопнувшая шина - событие. Оно говорит что у машины надо поменять колесо и оно будет заменено другим колесом. Одна сущность должна знать о другой только минимально необходимую информацию, тогда и путаницы никакой нет. Вот если у машины исчезнет колесо само из-за того, что шина лопнет, будет беда, т.к. про то что колесо на месте знает еще и например водитель, и ему ни к чему такие сюрпризы. Лучше всего конечно когда про это колесо не знает никто кроме машины, и нужно стремиться к тому чтобы связи между сущностями были минимальными, чтобы для водителя с летающей или гусеничной машиной абсолюно ничего не изменилось, но это уже тема интерфейсов.
__________________
ответ прост: be || !be == true

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 19:06.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.