Как удалить всех слушателей события из экранного объекта?

Это теперь обычно согласуется, что алгоритм слияния с 3 путями (возможно, с улучшениями, такой как переименовывают обнаружение и контакт с более сложной историей), который принимает во внимание версию на текущем ответвлении ('наш'), версия на объединенном ответвлении ('их') и версия общего предка объединенных ответвлений ('предок'), является (с практической точки зрения) лучшим способом разрешить слияния. В большинстве случаев, и для большей части слияния уровня дерева содержания (который версия файла взять) достаточно; редко существует потребность в контакте с конфликтами содержания, и затем diff3 алгоритм достаточно хорошо.

Для использования слияния с 3 путями необходимо знать общего предка объединенных ответвлений (co названный основой слияния). Для этого необходимо знать полный история между теми ответвлениями. То, в какой Подрывной деятельности, прежде чем (текущая) версия 1.5 испытывала недостаток (без третьего лица оснащает такой как SVK, или svnmerge) был слияние, отслеживающее , т.е. помнящее за фиксацию слияния, какие родители (что фиксации) использовались в слиянии. Без этой информации не возможно вычислить правильно общего предка в присутствии повторных слияний.

Берут для учетной записи следующую схему:

---.---a---.---b---d---.---1
        \        /
         \-.---c/------.---2

(который, вероятно, исказить..., будет хорошо иметь способность нарисовать схемы ASCII-творчества здесь) .
, Когда мы объединяли фиксации 'b' и 'c' (создающий фиксацию 'd'), общий предок был точкой условного перехода, фиксация 'a'. Но когда мы хотим объединить фиксации '1' и '2', теперь общий предок является фиксацией 'c'. Не храня информацию слияния мы должны были бы прийти к заключению неправильно, что это - фиксация 'a'.

Подрывная деятельность (до версии 1.5), и более ранний CVS, сделанный слиянием трудно, потому что необходимо было вычислить общего предка сами и дать информацию о предке вручную при выполнении слияния.

Мерзавец хранит информацию обо всех родителях фиксации (больше чем один родитель в случае фиксации слияния) в объекте фиксации. Таким образом, можно сказать, что Мерзавец хранит DAG (прямой граф без петель) изменений, храня и помня отношения между фиксациями.

(я не уверен, как Подрывная деятельность занимается проблемами, упомянутыми ниже)

Дополнительно слияние в Мерзавце может заниматься двумя дополнительными проблемами сложности: файл переименовывает (когда одна сторона переименовала файл, и другой не сделал; мы хотим добраться, переименовывают, и мы хотим получить изменения, примененные к корректному файлу) и перекрещивающиеся слияния (более сложная история, когда существует больше чем один общий предок).

  • Файл переименовывает во время слияния, управляются с помощью эвристического базирующегося счета подобия (и подобие содержания файла и подобие пути, принят во внимание) , переименовывают обнаружение . Мерзавец обнаруживает, какие файлы соответствуют друг другу в объединенных ответвлениях (и предок (предки)). На практике это работает вполне хорошо на случаи реального мира.
  • Перекрещивающиеся слияния , см. , определением в revctrl.org wiki, (и присутствие [1 126] несколько оснований слияния ) управляют при помощи [1 127] рекурсивная стратегия слияния, которая генерирует единственного виртуального общего предка.

10
задан Soviut 21 September 2009 в 03:15
поделиться

4 ответа

jeceuyper прав ...

сторона не хотя: DisplayObject extends EventDispatcher , который уже реализует IEventDispatcher ... чтобы быть более точным: вам нужно переопределить addEventListener и removeEventListener , чтобы отслеживать слушателей ...

несколько технических деталей: я предлагаю вам использовать Словарь для хранения функций-обработчиков ... немного медленнее для вставки, но намного быстрее для удаления ... кроме того, Словарь поддерживает слабые ссылки, что очень важно в случае обработка событий ... также имейте в виду, что useCapture позволяет добавить один и тот же обработчик дважды ...

удачи ...;)

7
ответ дан 3 December 2019 в 19:34
поделиться

Гленн прав, не существует таких вещей, как метод removeAllListener или listAllListener. Тем не менее, вы можете заставить свой custumiplayObject реализовать интерфейс IEventDispatcher и отслеживать всех слушателей, добавленных или удаленных из вашего объекта.

4
ответ дан 3 December 2019 в 19:34
поделиться

back2dos упомянул подход, который вам следует использовать. Я расширил класс movieclip и реализовал все виды функций, которые я использую ежедневно, но не являются частью класса movieclip. включая переопределение для класса addEventListener

protected var listeners : Dictionary    = new Dictionary();
override public function addEventListener( type : String, listener : Function, useCapture : Boolean = false, priority : int = 0, useWeakReference : Boolean = true) : void
{
        var key : Object = {type:type,useCapture:useCapture};
        if( listeners[ key ] ) {
                removeEventListener( type, listeners[ key ], useCapture );
                listeners[ key ] = null;
        }
        listeners[ key ] = listener;

        super.addEventListener( type, listener, useCapture, priority, useWeakReference );
}
protected function removeListeners () : void
{
        try
        {
            for (var key:Object in listeners) {
                    removeEventListener( key.type, listeners[ key ], key.useCapture );
                        listeners[ key ] = null;
            }
        }catch(e:Error){}
}
8
ответ дан 3 December 2019 в 19:34
поделиться

This is sort of a hack, but in some (perhaps most cases), you can easily set the display object to null and re-initialize it and then re-configure it with zero visual disruption.

This has the added bonus of removing all event listeners.

Unless you are doing this in an app that already has hundreds of listeners and objects then it should work perfectly fine so long as you can tolerate reconfiguring your display object.

Obviously, you shouldn't do this on anything that is doing something crazy in the constructor like loading data.

2
ответ дан 3 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: