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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 22.03.2013, 01:53
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 21  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
По вопросу.
Ссылка на btn одна в рамках создания всех анонимной функции для UIButton, поэтому в анонимной функции по этой ссылке будет последний экземпляр.
Как сделать для каждой анонимной функции свою ссылку? вызвать метод аргументом которого будет нужная ссылка на нужный экземпляр, например:
Код AS3:
for (var i:int= 0; i < 10; i++)
{
	var btn:UIButton = new UIButton();
	btn.id = i;
	btn.handler = function (btn):Function
	{
		return function () {
			trace(btn.id)
		};
	}(btn);
}
Это будет работать, но так делать нельзя. Почему?
1. бережем память на компьютере пользователя (каждый экземпляр UIButton = новый handler, и если в анонимной функции используется что-то кроме аргументов которые передаются в неё, то она некогда не отчистится из памяти)
2. бережем глаза и свой мозг, так как никаких удобных инструментов (подсветка, переходы по F3) никакая среда разработки не предоставит

как это усовершенстовать?
Код AS3:
for (var i:int= 0; i < 10; i++)
{
	var btn:UIButton = new UIButton();
	btn.id = i;
	btn.handler = handlerUIButton;
}
 
function handlerUIButton(btn:UIButton):void
{
	trace(btn.id);
}
один метод для всех вызовов handler во всех экземплярах UIButton, при вызове нужно передать того кто вызывает (из самомого себя handler(this))

Всё вроде хорошо, но если слушателей много, а вызывается всего один?
Такак как этот объект не DisplayObject, Нужно унаследоваться от EventDispatcher (или имплементировать методы интерфейса IEventDispatcher и реализовать их с методами экземпляра EventDispatcher) при вызове дергать dispatchEvent(new MouseEvent(MouseEvent.CLICK));, а подписываться так же как и к DisplayObject btn.addEventListener(MouseEvent.CLICK, onClick);


Последний раз редактировалось Nooob; 22.03.2013 в 02:16.
Создать новую тему   Часовой пояс GMT +4, время: 11:53.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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