PDA

Просмотр полной версии : event.handled - Неужели в AS3 это тоже есть + не контролируется?


wvxvw
13.12.2009, 17:32
Вобщем, обнаружил одну неприятную фишку - если событие один раз диспатчится и обрабатывается, то его по второму разу уже никак не использовать - слушатель просто не вызовется...
Вопрос - а какой в этом смысл? Если мне хватит одного события для всего, что мне нужно, зачем создавать их пачками? Я не к тому... может это зачем-то и нужно, например, для встроенных событий - но для пользовательских - зачем же... :mad:

Т.е. чтобы уточнить:
package org.wvxvws.gui.repeaters
{
import flash.events.Event;

/**
* RepeaterEvent event.
* @author wvxvw
*/
public class RepeaterEvent extends Event
{
public static const REPEAT:String = "repeat";

public function get index():int { return _repeater.index; }

public function get currentItem():Object { return _repeater.currentItem; }

private var _repeater:IRepeater;

public function RepeaterEvent(type:String, repeater:IRepeater)
{
super(type);
_repeater = repeater;
}

public override function clone():Event { return this; }

public override function toString():String
{
return formatToString("RepeaterEvent", "type", "index", "currentItem");
}
}
}
Как можно понять, событие все рано не имеет никаких "личных" свойств, и клонировать мне его совсем не надо, но, очевидно, что после одного использования этого события оно становится больше не пригодным...

UPD: http://bugs.adobe.com/jira/browse/FP-3456

ir73
14.12.2009, 12:13
попробуй
public override function clone():Event {
return new RepeaterEvent(type, _repeater);
}

Wolsh
14.12.2009, 13:52
зачем создавать их пачками?
Ну ты ведь знаешь, что в ас все реализации максимально универсальны)) а значит в каждом конкретном случае несколько избыточны. Может, ты и не предполагаешь у себя ИЗМЕНЕНИЕ события в цепочке получателей, но такая возможность есть. Событие может быть изменено и даже отменено, и в твоем варианте псевдоклонирования это все произойдет с одним и тем же объектом, что полностью лишает его смысла. Для того и нужно клонирование, чтобы каждый раз диспатчить свеженькое нулевое событие с заданными параметрами, а старое пошарканное - в топку.

iflamberg
14.12.2009, 14:15
2ir73: ты здесь как раз таки тупо плодишь событие.

2wvxvw: ну собственно, все мы знаем, что флеш далеко не идеален, правда ведь? Это вопрос из серии: "а почему нельзя повторно использовать Sound?" - никто на него ответа не даст. Так задумано.

Wolsh
14.12.2009, 14:21
iflamberg : "Тупо"? А ты делаешь это как-то по-другому? Поделись, интересно.

wvxvw
14.12.2009, 15:01
ir73: Это-то понятно. Плохо то, что кто-то из каких-то высокоидейных соображений решил что это нужно делать обязательно.

Как бы в IE система событий именно так и реализована - там всего 1 событийный объект, и всплывание там есть и фазы... Можно не любить такую реализацию, но не стоит быть таким категоричным...
И как бы в моем конкретном случае абсолютно никто ничего бы не потерял, если бы событие было только одно - оно не всплывает, у него нету поведения по умолчанию, да и вообще, я использую события и обработчики на 90 процентов только потому, что это MXML компонент - иначе еще бы 10 раз подумал...