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

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

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

Регистрация: Jul 2010
Сообщений: 23
По умолчанию Не понимаю как работает EventDispatcher

Добрый день суток!

Вопрос скорее всего посящен работе событий в ActionScript 3.0.

Исходные данные:

Использую DataGrid с переопределенным CellRenderer для одного из столбцов:

Код AS3:
// таблица со списком сотрудников
var _listEmployees:DataGrid;
 
var column:DataGridColumn;
 
_listEmployees = new DataGrid();
 
column = new DataGridColumn("fio");
column.headerText = "Фамилия Имя Отчетсво";
column.cellRenderer = FIOCellRenderer;
column.minWidth = 224;
_listEmployees.addColumn(column);
 
_listEmployees.rowHeight = 30;
 
addEventListener(EventsEnum.EVENT_SHOW_POPUP, onShowPopup);
Класс FIOCellRenderer выглядит следующим образом:
Код AS3:
public class FIOCellRenderer extends MovieClip implements ICellRenderer
{
	private var _listData:ListData;
	private var _data:Object;
	private var _selected:Boolean;
	private var _mouseState:String;
	private var _btnPopup:SimpleButton;
 
	public function FIOCellRenderer() 
	{
		_btnPopup = new SimpleButton();
		_btnPopup.addEventListener(MouseEvent.MOUSE_DOWN, onPopup);
	}
 
	public function get data():Object
	{
		return _data;
	}
 
	public function set data(param0:Object):void
	{
		_data = param0;
	}
 
	public function get listData():ListData
	{
		return _listData;
	}
 
	public function set listData(param0:ListData):void
	{
		_listData = param0
	}
 
	public function get selected():Boolean
	{
		return _selected;
	}
 
	public function set selected(param0:Boolean):void
	{
		_selected = param0;
	}
 
	public function setMouseState(param0:String):void
	{
		_mouseState = param0;
	}
 
	public function setSize(w:Number, h:Number):void
	{
		...
	}
 
	public function setStyle(style:String, value:Object):void
	{
		...
	}
 
	protected function onPopup(e:MouseEvent):void
	{
		dispatchEvent(new MyEvent(EventsEnum.EVENT_SHOW_POPUP, true, false, null, new Point(e.stageX, e.stageY)));
	}
}
Обработчик события EventsEnum.EVENT_SHOW_POPUP вот такой:

Код AS3:
protected function onShowPopup(e:MyEvent):voi
{
	_menuModal = new Sprite();
	_menuModal.graphics.beginFill(0xFFFFFF, 0.5);
	_menuModal.graphics.drawRect(0, 0, Constants.STAGE_WIDTH, Constants.STAGE_HEIGHT);
	_menuModal.graphics.endFill();
	addChild(_menuModal)
}
Этот обработчки создает полупрозрачный Sprite и выводит его поверх всех (в том числе _listEmployees) элементов.

Я щелкаю по _btnPopup, вызывается обработчик onShowPopup. А теперь вопрос:
Если в обработчкике не стоит addChild(_menuModal), то строчка в DataGrid выделяется, а _listEmployees.selectedItem возвращает Object, хранящуюся в этой строке.
Если же строчка addChild(_menuModal) есть, то соответсвующая строка не выделяеся и _listEmployees.selectedItem возвращает null или возвращает элемент,
который был выбран до щелчка.
Почему так происходит?

Старый 20.09.2010, 21:08
Korben вне форума Посмотреть профиль Отправить личное сообщение для Korben Найти все сообщения от Korben
  № 2  
Ответить с цитированием
Korben

Регистрация: Sep 2010
Сообщений: 14
попробуйте
addEventListener(EventsEnum.EVENT_SHOW_POPUP, onShowPopup, true);

Старый 20.09.2010, 23:15
kosheev_me вне форума Посмотреть профиль Отправить личное сообщение для kosheev_me Найти все сообщения от kosheev_me
  № 3  
Ответить с цитированием
kosheev_me

Регистрация: Jul 2010
Сообщений: 23
Цитата:
попробуйте
addEventListener(EventsEnum.EVENT_SHOW_POPUP, onShowPopup, true);
Увы но не помогло

Добавлено через 19 часов 35 минут
Ну что ж... Разобрался сам
Проблема возникает вот в какой строке:
Код AS3:
_btnPopup.addEventListener(MouseEvent.MOUSE_DOWN, onPopup);
Дело в том, что DataGrid выделяет некоторую строку при событии MouseEvent.CLICK. А такого события в описанной ситуации в DataGrid просто не приходит.
В DataGrid приходит событие MouseEvent.MOUSE_DOWN, а событие MouseEvent.MOUSE_UP приходит уже в в то самое полупрозрачное окно.


Последний раз редактировалось kosheev_me; 21.09.2010 в 18:52. Причина: Почему-то вложенный тег [B] в тег [AS3] не выделяет жирным, а просто пишет <b>....b>
Создать новую тему Ответ Часовой пояс GMT +4, время: 23:21.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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