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

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

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

Регистрация: Jan 2006
Сообщений: 179
По умолчанию Как понять, кто вызвал событие?

Есть собственный cellRender для tileList где есть изображение и добавлены кнопки
В основном файле есть обработчик события:

Код AS3:
files.addEventListener(ListEvent.ITEM_CLICK, action);
 
private function action(event:ListEvent):void {
 // хочу понять куда кликнул пользователь просто на картинку или по кнопке ...
}

Старый 14.01.2011, 01:31
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 2  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
event.target в обработчике
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 14.01.2011, 01:51
motoroller вне форума Посмотреть профиль Отправить личное сообщение для motoroller Найти все сообщения от motoroller
  № 3  
Ответить с цитированием
motoroller

Регистрация: Jan 2006
Сообщений: 179
[object TileList]

Добавлено через 5 минут
если делать так: trace(event.target.name) // все время выводит instance75

Куда бы ты не кликал в ячейке хоть на картинку хоть на кнопку

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
у объекта события есть 2 интересных свойства - target и currentTarget. Почитайте на досуге.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
TanaTiX, ListEvent отправляется собственно TileList'ом, соответственно и target и currentTarger будут указывать на TileList.
Код AS3:
files.addEventListener(ListEvent.ITEM_CLICK, action);
 
private function action(event:ListEvent):void {
   /*
     ваш CellRenderer. Вместо Object пропишите ваш тип.
     В самом CellRenderer сделайте переменную которая будет сигнализировать, что нажато
   */
   var renderer:Object = files.itemToCellRenderer(event.item);
}
Или сделайте свое всплывающее событие от CellRenderer и туда уже пихайте что хотите. Или заведите в данных дополнительное поле в которое записывайте, что нажато. Тогда в обработчике достаточно будет проверить это поле у event.item.

Старый 14.01.2011, 05:18
motoroller вне форума Посмотреть профиль Отправить личное сообщение для motoroller Найти все сообщения от motoroller
  № 6  
Ответить с цитированием
motoroller

Регистрация: Jan 2006
Сообщений: 179
Вы думаете я стал бы писать сюда не попробовав
trace(event.Currenttarget.name)

Добавлено через 5 минут
Цитата:
Сообщение от alatar Посмотреть сообщение
TanaTiX, ListEvent отправляется собственно TileList'ом, соответственно и target и currentTarger будут указывать на TileList.
Код AS3:
files.addEventListener(ListEvent.ITEM_CLICK, action);
 
private function action(event:ListEvent):void {
   /*
     ваш CellRenderer. Вместо Object пропишите ваш тип.
     В самом CellRenderer сделайте переменную которая будет сигнализировать, что нажато
   */
   var renderer:Object = files.itemToCellRenderer(event.item);
}
Или сделайте свое всплывающее событие от CellRenderer и туда уже пихайте что хотите. Или заведите в данных дополнительное поле в которое записывайте, что нажато. Тогда в обработчике достаточно будет проверить это поле у event.item.
Код AS3:
// cellRender
// события для меню
b_delete.addEventListener (MouseEvent.CLICK, deleteFile);
 
private function deleteFile(event:MouseEvent):void {
    data.data.action = "delete";
}
 
//mainScript
 
files.addEventListener(ListEvent.ITEM_CLICK, action);
private function action(event:ListEvent):void {
          var action:String=event.item.data.action;
 
				if(action=='delete') {
trace('работает')
}
Данная конструкция работает, но есть минус, что она запоминает прошлое действие, допустим было: удалить файл, но я его не удалил и в дальнейшем по нажатию на эту ячейку вызывается фунция удаления тк data.data.action = "delete", ну соотвественно пока не выбрано какое-либо другое действие с этой ячейкой

Скажи я что-то неверно делаю в принципе или эту схему можно как-то изменить?


Последний раз редактировалось motoroller; 14.01.2011 в 05:30.
Старый 14.01.2011, 05:27
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 7  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Извиняюсь, я подумал, что речь идет об экземпляре класса. В 1м посте cellRender с маленькой буквы, вот и обознался, думаю уже в зависимости от регистра...
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
или эту схему можно как-то изменить?
подписаться на MouseEvent.CLICK у картинки и у самого CellRenderer. Можно использовать один обработчик:
Код AS3:
private function deleteFile(event:MouseEvent):void {
if (event.currentTarget == b_delete)
    {
        data.data.action = "delete";
    {
    else
    {
        data.data.action = "none";
    }
}
Добавлено через 1 минуту
Хотя при таком раскладе у картинки можно и не подписываться, а просто отрубить ей мышь.

Старый 14.01.2011, 05:55
motoroller вне форума Посмотреть профиль Отправить личное сообщение для motoroller Найти все сообщения от motoroller
  № 9  
Ответить с цитированием
motoroller

Регистрация: Jan 2006
Сообщений: 179
так попробую, а вообще это плохо или нет что повешано можно сказать два обработчика
из главного класса и cellrendera ?
Не будет ли что-либо дублироваться...
Так а если у меня еще не одна кнопка а много ...

Старый 14.01.2011, 06:01
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 10  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
так попробую, а вообще это плохо или нет что повешано можно сказать два обработчика
В принципе, можно обойтись и одним, если повесить его на CellRenderer и проверять event.target == b_delete.
Цитата:
Так а если у меня еще не одна кнопка а много ...
Волшебных палочек не существует. Есть кнопка, значит кто-то должен ее обработать.

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

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

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


 


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


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