Просмотр полной версии : Как понять, кто вызвал событие?
motoroller
14.01.2011, 01:27
Есть собственный cellRender для tileList где есть изображение и добавлены кнопки
В основном файле есть обработчик события:
files.addEventListener(ListEvent.ITEM_CLICK, action);
private function action(event:ListEvent):void {
// хочу понять куда кликнул пользователь просто на картинку или по кнопке ...
}
event.target в обработчике
motoroller
14.01.2011, 01:51
[object TileList]
Добавлено через 5 минут
если делать так: trace(event.target.name) // все время выводит instance75
Куда бы ты не кликал в ячейке хоть на картинку хоть на кнопку :(
у объекта события есть 2 интересных свойства - target и currentTarget. Почитайте на досуге.
TanaTiX, ListEvent отправляется собственно TileList'ом, соответственно и target и currentTarger будут указывать на TileList.
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.
motoroller
14.01.2011, 05:18
Вы думаете я стал бы писать сюда не попробовав
trace(event.Currenttarget.name)
Добавлено через 5 минут
TanaTiX, ListEvent отправляется собственно TileList'ом, соответственно и target и currentTarger будут указывать на TileList.
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.
// 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", ну соотвественно пока не выбрано какое-либо другое действие с этой ячейкой
Скажи я что-то неверно делаю в принципе или эту схему можно как-то изменить?
Извиняюсь, я подумал, что речь идет об экземпляре класса. В 1м посте cellRender с маленькой буквы, вот и обознался, думаю уже в зависимости от регистра...
или эту схему можно как-то изменить?
подписаться на MouseEvent.CLICK у картинки и у самого CellRenderer. Можно использовать один обработчик:
private function deleteFile(event:MouseEvent):void {
if (event.currentTarget == b_delete)
{
data.data.action = "delete";
{
else
{
data.data.action = "none";
}
}
Добавлено через 1 минуту
Хотя при таком раскладе у картинки можно и не подписываться, а просто отрубить ей мышь.
motoroller
14.01.2011, 05:55
так попробую, а вообще это плохо или нет что повешано можно сказать два обработчика
из главного класса и cellrendera ?
Не будет ли что-либо дублироваться...
Так а если у меня еще не одна кнопка а много ...
так попробую, а вообще это плохо или нет что повешано можно сказать два обработчика
В принципе, можно обойтись и одним, если повесить его на CellRenderer и проверять event.target == b_delete.
Так а если у меня еще не одна кнопка а много ...
Волшебных палочек не существует. Есть кнопка, значит кто-то должен ее обработать.
motoroller
14.01.2011, 06:04
А еще вопро а собственно функцию надо вешать на какое событие?
... class CustomImageCacheCell
public function CustomImageCacheCell() {
super();
this.addEventListener (MouseEvent.CLICK, actions);
}
Так ошибку выдает
motoroller
14.01.2011, 06:09
Ошибься все ок :)
Всмысле работает по Вашей схеме
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.