Peer-reviewed code snippets that anyone can edit
A wiki for useful code snippets
[EventDispatcher] singleton - a core-API based Signals and Slots implementation
r4 r5
3
3
Registering a native JavaScript object via {{EventDispatcher}}**{{.register}}** applies kind of an **{{[EventTarget]}}** interface onto this object thus featuring immediately its 3 methods **{{[addEventListener]}}**, **{{[removeEventListener]}}** and **{{[dispatchEvent]}}**.
4
4
 
5
5
Attempting to register DOM-**{{[Node]}}** or DOM-**{{[Element]}}** objects as well as reregistering of objects that already do implement the {{[EventTarget]}} interface is futile.
6
6
 
7
Furthermore, this observer does not support any bubbling or capturing of events for there are no dependencies like ancestry or tree-like object hierarchies.
7
Furthermore, this observer does not support any DOM-level-2 event flow behavior like capture, bubbling, propagation for there are no dependencies like ancestry or tree-like object hierarchies.
8
8
 
9
9
Once such an object features {{[EventTarget]}} behavior every other object can subscribe itself or listen via {{[addEventListener]}} to a certain event by passing a valid type and a handler to that firstly mentioned object.
10
 
11
10
 
12
11
 
13
12
[code=javascript]/*
14
    link-list:
13
  link-list:
15
14
 
16
        English:
15
    English:
17
16
 
18
            [http://en.wikipedia.org/wiki/Observer_pattern]    - Observer Pattern
19
            [http://en.wikipedia.org/wiki/Publish/subscribe]  - publish-subscribe
20
            [http://en.wikipedia.org/wiki/Signals_and_slots]  - Signals and Slots
17
      [http://en.wikipedia.org/wiki/Observer_pattern]   - Observer Pattern
18
      [http://en.wikipedia.org/wiki/Publish/subscribe]  - publish-subscribe
19
      [http://en.wikipedia.org/wiki/Signals_and_slots]  - Signals and Slots
21
20
 
22
            [http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/]
23
            [http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html]
24
            [http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/ecma-script-binding.html]
21
      [http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/]
22
      [http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html]
23
      [http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/ecma-script-binding.html]
25
24
 
26
        Deutsch/German:
27
            [http://de.wikipedia.org/wiki/Observer_(Entwurfsmuster)]  - Observer (Entwurfsmuster) / publish-subscribe
28
            [http://de.wikipedia.org/wiki/Signal-Slot-Konzept]        - Signal-Slot-Konzept
25
    Deutsch/German:
26
      [http://de.wikipedia.org/wiki/Observer_(Entwurfsmuster)]  - Observer (Entwurfsmuster) / publish-subscribe
27
      [http://de.wikipedia.org/wiki/Signal-Slot-Konzept]        - Signal-Slot-Konzept
29
28
*/
30
29
 
31
30
 
32
31
var EventDispatcher = (function () { // [EventDispatcher] Singleton.
~
~
 
239
238
  return {
240
239
 
241
240
    register: (function (obj/*:[Object]*/) { /*:void*/ // register | sign on
242
241
 
243
    //do not apply this customized [[EventTarget]] interface to [Node] or [Element] objects or to objects that already got augmented by this customized [EventTarget] features.
242
    //do not apply this customized [[EventTarget]] interface to DOM-[Node] or DOM-[Element] objects or to objects that already got augmented by this customized [EventTarget] features.
244
243
      if ((typeof obj.addEventListener == "function") || obj.attachEvent || (typeof obj.removeEventListener == "function") || obj.detachEvent || (typeof obj.dispatchEvent == "function") || obj.fireEvent) {
245
244
        return;
246
245
      }
247
246
      EventTarget.call(obj); // applying the MIXIN concept - [obj] implements the [[EventTarget]] interface.
Tags added:
Tags removed: