Ogólne#

Events#

W tym miejscu umieszczam powtarzające się specyficzne pojęcia i algorytmy w dziale Events, czyli mogą mieć one zastosowanie dla wszystkich interfejsów z tego działu.

Pojęcia#

W specyfikacji D3E pojęcie wysłania (dispatch) i odpalenia (fire) zdarzenia jest równoważne. Specyfikacja DOM4 bardziej konkretyzuje odpalanie zdarzeń.

event fire

Odpalenie zdarzenia o nazwie e # (fire an event named e) oznacza, że nowe zdarzenie używające interfejsu Event, z atrybutem type ustawianym na e i z atrybutem isTrusted ustawianym na boolowską wartość true, jest wysłane do danego obiektu.

Odpalenie w kontekście DOM jest krótszym zapisem dla zainicjowania i wysłania jakiegoś zdarzenia.

Odpalenie zdarzenia jest koncepcją, która ma ułatwić zapis całego procesu. Jeśli zdarzenie wymaga ustawienia jego atrybutu bubbles lub cancelable, to można dla przykładu napisać tak: "odpal zdarzenie o nazwie submit z jego atrybutem cancelable ustawianym na boolowską wartość true.

Łatwo zauważyć, że koncepcja odpalenia zdarzenia dotyczy tylko zaufanych zdarzeń, czyli jest rezerwowana dla zdarzeń generowanych przez aplikacje klienckie.

Algorytmy#

constructing events

Aby utworzyć zdarzenia # (constructing events) za pomocą interfejsu Event w roli konstruktora # (constructor), czy też innego interfejsu dziedziczącego po interfejsie Event, to w chwili jego wywołania należy wykonać następujące kroki:

  1. Utwórz nowe zdarzenie, które korzysta z interfejsu wywoływanego konstruktora.
  2. Ustaw flagę inicjalizacji.
  3. Ustaw atrybut type na argument type.
  4. Jeśli argument eventInitDict został przekazany, to dla każdego (for each) członka słownika zdefiniowanego w nim znajdź atrybut zdarzenia, którego identyfikator pasuje do klucza członka słownika i ustaw atrybut na wartość tego członka słownika.
  5. Zwróć nowo utworzone zdarzenie.
initialize

Aby zainicjować # (initialize) zdarzenie event, z typem type, bąbelkowaniem bubbles i anulowaniem cancelable, należy wykonać następujące kroki:

  1. Ustaw flagę inicjalizacji.
  2. Jeśli flagę wysłania jest ustawiona, to pomiń kolejne kroki.
  3. Usuń flagę zatrzymania propagacji, flagę natychmiastowego zatrzymania propagacji oraz flagę anulowania.
  4. Ustaw atrybut isTrusted na boolowską wartość false.
  5. Ustaw atrybut target na wartość null.
  6. Ustaw atrybut type na type.
  7. Ustaw atrybut bubbles na bubbles.
  8. Ustaw atrybut cancelable na cancelable.
dispatch

Aby wysłać # (dispatch) zdarzenie do danego obiektu, z opcjonalnym nadpisaniem celu target override, należy wykonać następujące kroki:

  1. Niech event będzie zdarzeniem, które ma być wysyłane.
  2. Ustaw flagę wysłania dla event.
  3. Ustaw atrybut target w event na target override, jeśli został przekazany, lub na obiekt, do którego event ma być wysłany.
  4. Jeśli wartość atrybut target w event należy do drzewa węzłów, niech event path będzie statyczną uporządkowaną listą wszystkich jego przodków, zgodnie z porządkiem drzewa, w przeciwnym razie niech event path będzie pustą listą.
  5. Ustaw atrybut eventPhase w event na wartość CAPTURING_PHASE.
  6. Dla każdego (for each) obiektu w event path wywołuj jego nasłuchy zdarzeń ze zdarzeniem event, tak długo, jak flaga zatrzymania propagacji dla event jest nieaktywna.
  7. Ustaw atrybut eventPhase w event na wartość AT_TARGET.
  8. Wywołuj na wartości atrybutu target w event nasłuchy zdarzeń ze zdarzeniem event, jeśli flaga zatrzymania propagacji dla event jest nieaktywna.
  9. Jeśli wartością atrybut bubbles w event jest boolowskie true, to wykonaj poniższe podkroki:
    1. Odwróć kolejność w event path.
    2. Ustaw atrybut eventPhase w event na wartość BUBBLING_PHASE.
    3. Dla każdego (for each) obiektu w event path wywołuj jego nasłuchy zdarzeń ze zdarzeniem event, tak długo, jak flaga zatrzymania propagacji dla event jest nieaktywna.
  10. Usuń flagę wysłania dla event.
  11. Ustaw atrybut eventPhase w event na wartość NONE.
  12. Ustaw atrybut currentTarget w event na wartość null.
  13. Zwróć boolowską wartość false jeśli flaga anulowania dla event jest ustawiona, w przeciwnym razie zwróć boolowską wartość true.
invoke

Aby wywołać # (invoke) nasłuchy zdarzeń ze zdarzeniem dla danego obiektu, należy wykonać następujące kroki:

  1. Niech event będzie zdarzeniem, dla którego nasłuchy zdarzeń mają być wywołane.
  2. Niech listeners będzie kopią nasłuchów zdarzeń powiązanych z obiektem, dla którego opisywane kroki są wykonywane.
  3. Ustaw atrybut currentTarget w event na obiekt, dla którego opisywane kroki są wykonywane.
  4. Dla każdego (for each) nasłuchu zdarzenia w listeners wykonaj poniższe podkroki:
    1. Jeśli flaga natychmiastowego zatrzymania propagacji dla event jest ustawiona, to przerwij algorytm wywołania.
    2. Niech listener będzie nasłuchem zdarzenia.
    3. Jeśli wartością atrybut type w event nie jest typ w listener, to pomiń te podkroki (i uruchom je dla następnego nasłuchu zdarzenia).
    4. Jeśli wartością atrybut eventPhase w event jest CAPTURING_PHASE i przechwytywanie w listener ma boolowską wartość false, to pomiń te podkroki (i uruchom je dla następnego nasłuchu zdarzenia).
    5. Jeśli wartością atrybut eventPhase w event jest BUBBLING_PHASE i przechwytywanie w listener ma boolowską wartość true, to pomiń te podkroki (i uruchom je dla następnego nasłuchu zdarzenia).
    6. Wywołaj funkcję zwrotną handleEvent w listener, ze zdarzeniem przekazanym do tego algorytmu jako pierwszym argumentem i wartością atrybut currentTarget w event będącą wartością this funkcji zwrotnej.
Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Ogólne (H1) Events (H2) Pojęcia (H3) event fire (H5) Algorytmy (H3) constructing events (H5) initialize (H5) dispatch (H5) invoke (H5)