src/cm/media/js/lib/yui/yui_3.10.3/docs/event-custom/index.html
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
<!DOCTYPE html>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
<html lang="en">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
<head>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
    <meta charset="utf-8">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
    <title>EventTarget</title>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=PT+Sans:400,700,400italic,700italic">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
    <link rel="stylesheet" href="../../build/cssgrids/cssgrids-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
    <link rel="stylesheet" href="../assets/css/main.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
    <link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
    <link rel="shortcut icon" type="image/png" href="../assets/favicon.png">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
    <script src="../../build/yui/yui-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
</head>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
<body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
<!--
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
<a href="https://github.com/yui/yui3"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub"></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
-->
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
<div id="doc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    <div id="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
        <h1><img src="http://yuilibrary.com/img/yui-logo.png"></h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
        <a href="#toc" class="jump">Jump to Table of Contents</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
            <h1>EventTarget</h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
    <div class="yui3-g">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
        <div class="yui3-u-3-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
            <div id="main">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
                <div class="content"><link type="text/css" rel="stylesheet" href="../../build/cssbutton/cssbutton-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
<div class="intro">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
        The YUI Custom Event System enables you to define and use events beyond
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
        those available in the DOM &mdash; events that are specific to and of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
        interest in your own application. Custom Events are designed to work
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
        much like DOM events.  They can bubble, pass event facades, have their
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
        propagation and default behaviors suppressed, etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
        The APIs for working with custom events are provided by the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
        <code>EventTarget</code> class.  All other infrastructure classes extend
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
        <code>EventTarget</code>, but if you just need the custom event APIs, you can
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
        <code>extend</code> or <code>augment</code> your classes with <code>EventTarget</code> directly.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
    <p class="deprecated"><strong>DEPRECATION NOTE:</strong> The <code>subscribers</code> and <code>afters</code> properties which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
       used to sit on <code>CustomEvent</code> object instances have been deprecated and 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
       removed for performance reasons as of the 3.7.0 release.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
    <p>If you're referring to the <code>subscribers</code> or <code>afters</code> properties directly just
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
       to access the set of subscribers,  consider switching to the public <code>getSubs()</code> 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
       method instead which hides you from the implementation details.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
    <p>If you have a use case which requires you to access the above properties 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
       directly you can set <code>Y.CustomEvent.keepDeprecatedSubs</code> to true, to restore 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
       them, but you will incur a performance hit if you enable this flag.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
    <!--p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
        Bundled with <code>EventTarget</code> are <a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
        href="http://en.wikipedia.org/wiki/Aspect_oriented_programming">Aspect
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
        Oriented Programming</a> methods that allow you to subscribe to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
        execution of object methods, and 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
        their own.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
    </p-->
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
<!-- insert Events Evolved video here -->
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
<h2 id="getting-started">Getting Started</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
To include the source files for EventTarget and its dependencies, first load
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
the YUI seed file if you haven't already loaded it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
<pre class="code prettyprint">&lt;script src=&quot;http:&#x2F;&#x2F;yui.yahooapis.com&#x2F;3.10.3&#x2F;build&#x2F;yui&#x2F;yui-min.js&quot;&gt;&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
Next, create a new YUI instance for your application and populate it with the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
modules you need by specifying them as arguments to the <code>YUI().use()</code> method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
YUI will automatically load any dependencies required by the modules you
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
specify.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
<pre class="code prettyprint">&lt;script&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
&#x2F;&#x2F; Create a new YUI instance and populate it with the required modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
YUI().use(&#x27;event-custom&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
    &#x2F;&#x2F; EventTarget is available and ready for use. Add implementation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
    &#x2F;&#x2F; code here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
For more information on creating YUI instances and on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
<a href="http://yuilibrary.com/yui/docs/api/classes/YUI.html#method_use"><code>use()</code> method</a>, see the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
documentation for the <a href="../yui/index.html">YUI Global Object</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
<h2 id="video-overview">Video Overview</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
<iframe width="640" height="360" src="http://www.youtube.com/embed/s_7VjN3qxe8" frameborder="0" allowfullscreen></iframe>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
    This video from YUIConf 2009 gives a good overview of the YUI event system
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
    API.  The content covers DOM and custom events.  Note: the <a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
    href="../event/index.html#synthetic-events">synthetic event</a> system was
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
    updated since this video.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
<h2 id="the-basics">The Basics</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
    You can get started using custom events and the <code>EventTarget</code> API without
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
    creating your own class.  The YUI instance (typically <code>Y</code>) is an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
    <code>EventTarget</code>, as is pretty much every other class in YUI.  We'll go over
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
    the basics using <code>Y</code>, then move into creating your own <code>EventTarget</code>s.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
    If you've looked over the <a href="../event/index.html#the-basics">DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
    Event system docs</a>, this should look very familiar. That's because
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
    <code>Node</code>s are also <code>EventTarget</code>s.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
<h3 id="subscribing-to-events">Subscribing to Events</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
<pre class="code prettyprint">&#x2F;&#x2F; Custom events can have any name you want
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
Y.on(&#x27;anyOldNameYouWant&#x27;, function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
    alert(&quot;Looky there!&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
&#x2F;&#x2F; Group subscriptions by passing an object or array to on()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
Y.on({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
    somethingImportant: updateCalendar,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
    birthday          : eatCake,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
    weekendEnd        : backToTheGrindstone
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
&#x2F;&#x2F; Some events have prefixes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
Y.once(&quot;fuji:available&quot;, climb);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
&#x2F;&#x2F; Custom events have distinct &quot;after&quot; moments
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
Y.after(&quot;spa-category|pedicure&quot;, gelatoTime);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
    All <code>EventTarget</code>s host methods
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
    <a href="http://yuilibrary.com/yui/docs/api/classes/EventTarget.html#method_on"><code>on</code></a>, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
    <a href="http://yuilibrary.com/yui/docs/api/classes/EventTarget.html#method_once"><code>once</code></a>, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
    <a href="http://yuilibrary.com/yui/docs/api/classes/EventTarget.html#method_after"><code>after</code></a>, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
    <a href="http://yuilibrary.com/yui/docs/api/classes/EventTarget.html#method_onceAfter"><code>onceAfter</code></a>. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
    Both <code>once</code> and <code>onceAfter</code> will automatically detach the subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
    after the callback is executed the first time.  All subscription methods
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
    return a subscription object called an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
    <a href="http://yuilibrary.com/yui/docs/api/classes/EventHandle.html">EventHandle</a>. The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
    distinction between <code>on</code> and <code>after</code> is discussed in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
    <a href="#after">"after" phase</a> section below.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
<h3 id="fire">Firing Events</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
<pre class="code prettyprint">&#x2F;&#x2F; All subscribers to the myapp:ready event will be executed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
Y.fire(&#x27;myapp:ready&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
&#x2F;&#x2F; Pass along relevant data to the callbacks as arguments
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
Y.fire(&#x27;birthday&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
    name: &#x27;Walt Disney&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
    birthdate: new Date(1901, 11, 5)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
<p id="event-data-object">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
    Notify event subscribers by calling <code>fire( eventName )</code>, passing any
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
    extra data about the event as additional arguments.  Though <code>fire</code>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
    accepts any number of arguments, it is preferable to send all event data
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
    in an object passed as the second argument.  Doing so avoids locking your
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
    code into a specific <code>fire</code> and callback signature.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
<pre class="code prettyprint">&#x2F;&#x2F; Subscription callbacks receive fire() arguments
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
Y.on(&#x27;birthday&#x27;, function (name, birthdate) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
    var age = new Date().getFullYear() - birthdate.getFullYear();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
    alert(&#x27;Happy &#x27; + age + &#x27;, &#x27; + name + &#x27;!&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
&#x2F;&#x2F; Possible, but not recommended
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
Y.fire(&#x27;birthday&#x27;, &#x27;A. A. Milne&#x27;, new Date(1882, 0, 18));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
&#x2F;&#x2F; Instead, try to always pass only one object with all data
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
Y.on(&#x27;birthday&#x27;, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
    var age = new Date().getFullYear() - e.birthdate.getFullYear();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
    alert(&#x27;Happy &#x27; + age + &#x27;, &#x27; + e.name + &#x27;!&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
Y.fire(&#x27;birthday&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
    name: &#x27;&quot;Uncle&quot; Walt Whitman&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
    birthdate: new Date(1819, 4, 31)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
    In the world of DOM events, the <code>fire</code> step is something the browser is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
    responsible for.  A typical model involves the browser receiving keyboard
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
    input from the user and firing <code>keydown</code>, <code>keyup</code>, and <code>keypress</code> events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
    Custom events put your code in the position of dispatching events in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
    response to criteria that are relavant to your objects or application.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
<h3 id="callback-arguments-and-event-facades">Callback arguments and event facades</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
<pre class="code prettyprint">&#x2F;&#x2F; Simple notification events don&#x27;t send event objects, only fire() data
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
Y.on(&#x27;talkie&#x27;, function (data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
    alert(&#x27;(&#x27; + data.time + &#x27;) Walkie &#x27; + data.message);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
    &#x2F;&#x2F; data.preventDefault is not defined. data is just a plain object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
Y.fire(&#x27;talkie&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
    message: &#x27;roger, over.&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
    time: new Date()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
&#x2F;&#x2F; Events configured to emitFacade will send an event object, merged with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
&#x2F;&#x2F; fire() data
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
Y.publish(&#x27;bill:due&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
    emitFacade: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
    defaultFn : payUp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
Y.on(&#x27;bill:due&#x27;, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
    &#x2F;&#x2F; Event facades have standard properties and methods as well as properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
    &#x2F;&#x2F; from payload data passed to fire()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
    if (e.payee === &#x27;Rich Uncle Sal&#x27;) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
        e.preventDefault(); &#x2F;&#x2F; the &#x60;payUp&#x60; method won&#x27;t be called (Sal can wait)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
&#x2F;&#x2F; Objects passed as the second argument to fire() for facade events will have
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
&#x2F;&#x2F; their properties merged onto the facade received by the callback.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
Y.fire(&#x27;bill:due&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
    payee: &#x27;Great Aunt Myra&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
    amount: 20
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
    Custom event callbacks are <em>usually, but not always</em> passed an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
    <a href="http://yuilibrary.com/yui/docs/api/classes/EventFacade.html">EventFacade</a> as their
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
    first argument.  Custom events can be configured to send event facades or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
    only the data they were fired with.  <a href="#event-data-object">Always
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
    passing event data in an object</a> as the second argument to <code>fire</code> allows
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
    you to write all your callbacks to expect event data as a single first
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
    argument, whether it's an <code>EventFacade</code> or just a plain object.  The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
    <code>emitFacade</code> and <code>defaultFn</code> configurations are detailed below, in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
    <a href="#publishing-events">Publishing Events</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
<h3 id="detaching-event-subscriptions">Detaching Event Subscriptions</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
<pre class="code prettyprint">&#x2F;&#x2F; Subscription methods return a subscription handle...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
var subscription = Y.on(&#x27;myapp:ready&#x27;, initComponents);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
&#x2F;&#x2F; ...with a detach method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
subscription.detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
&#x2F;&#x2F; Or detach by signature
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
Y.detach(&#x27;myapp:ready&#x27;, initComponents);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
&#x2F;&#x2F; Or by subscription category
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
Y.on(&#x27;spa-category|pedicure&#x27;, gelatoTime);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
&#x2F;&#x2F; Detach subscriptions to all events in the spa-category subscription group
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
Y.detach(&#x27;spa-category|*&#x27;);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
    The preferred method of detaching subscriptions is to use the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
    <a href="http://yuilibrary.com/yui/docs/api/classes/EventHandle.html">EventHandle</a> that is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
    returned from the subscription methods.  Alternately you can use the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
    <a href="http://yuilibrary.com/yui/docs/api/classes/EventTarget.html#method_detach"><code>detach</code> or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
    <code>detachAll</code> methods</a> which work as described in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
    <a href="../event/index.html#detach-methods">Event user guide</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
<h3 id="extend-event-target">Extending EventTarget</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
<p>Add the <code>EventTarget</code> APIs onto any class using <code>Y.augment()</code>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
<pre class="code prettyprint">function MyClass() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
    &#x2F;* insert constructor logic here *&#x2F;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
MyClass.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
    add: function (item) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
        &#x2F;&#x2F; You can assume the APIs are available from your class instances
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
        this.fire(&quot;addItem&quot;, { item: item });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
    ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
&#x2F;&#x2F; Make MyClass an EventTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
Y.augment(MyClass, Y.EventTarget);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
var instance = new MyClass();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
instance.on(&#x27;addItem&#x27;, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
    alert(&quot;Yay, I&#x27;m adding &quot; + e.item);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
instance.add(&#x27;a new item&#x27;); &#x2F;&#x2F; ==&gt; &quot;Yay, I&#x27;m adding a new item&quot;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
    <code>Y.augment</code> works like a lazy <code>extend</code> or a mixin.  It adds the APIs to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
    host class, but on the first call to any of the methods, it calls the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
    <code>EventTarget</code> constructor on the instance to make sure the necessary
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
    internal objects are ready for use.  If your class extends another,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
    augmenting it won't interfere with that inheritance hierarchy.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
    <code>EventTarget</code>s can be set up with a number of default configurations for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
    the events they <code>fire</code>.  Pass the defaults as the fourth argument to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
    <code>Y.augment</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
<pre class="code prettyprint">&#x2F;&#x2F; Make all events fired from MyClass instances send an event facade
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
Y.augment(MyClass, Y.EventTarget, true, null, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
    emitFacade: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
<h2 id="publishing-events">Publishing Events</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
    Some custom event <a href="#configs">configurations can be defaulted</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
    from class configuration, but others need to be specified on a per-event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
    basis.  Use the <code>publish</code> method to do this.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
<pre class="code prettyprint">&#x2F;&#x2F; publish takes an event name and a configuration object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
Y.publish(&#x27;somethingSpecial&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
    emitFacade: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
    broadcast: 2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
    defaultFn: clapClapHallelujah,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
    fireOnce: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
<h3 id="facade">Event Facades</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
    The most common configuration for custom events is <code>emitFacade</code>.  This is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
    because with the event facades comes a lot of additional functionality,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
    such as <a href="#defaultFn">preventable default behaviors</a> and <a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
    href="#bubbling">bubbling</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
<pre class="code prettyprint">function Recipe() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
    &#x2F;&#x2F; publishing events is typically done at instantiation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
    this.publish(&#x27;add&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
        emitFacade: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
        defaultFn: this._defAddFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
    Event facades mirror the event objects
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
    <a href="../event/index.html#facade-properties">you're familiar with from
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
    the DOM</a>.  They have properties like <code>e.type</code> and <code>e.target</code> and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
    the same methods, allowing you to call <code>e.preventDefault()</code> to disable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
    default behavior you've configured for the event or <code>e.stopPropagation()</code>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
    to stop the event from bubbling.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
<pre class="code prettyprint">var gruel = new Recipe();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
gruel.on(&#x27;add&#x27;, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
    if (e.item === &quot;brussel sprouts&quot;) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
        &#x2F;&#x2F; call e.preventDefault() just as you would for DOM events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
        e.preventDefault(); &#x2F;&#x2F; brussel sprouts? eww!
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
    <code>emitFacade</code> is typically passed as a default configuration to <code>Y.augment</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
    All other YUI infrastructure classes extend <code>EventTarget</code> and set 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
    <code>emitFacade</code> to <code>true</code> for you.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
<pre class="code prettyprint">Y.extend(MyClass, Y.Base, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
    add: function (item) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
        &#x2F;&#x2F; This will fire with an event facade because Y.Base sets emitFacade to true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
        this.fire(&#x27;addItem&#x27;, { item: item });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
    ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
<h3 id="once"><code>fireOnce</code> Events</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
    Important, typically system-level or lifecycle related events can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
    configured as <code>fireOnce</code>.  These events mimic things like <code>window.onload</code>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
    or the <code>domready</code> event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
<pre class="code prettyprint">Widget.prototype.render = function (where) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
    ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
    &#x2F;&#x2F; Widget rendering only happens once
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
    this.publish(&#x27;render&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
        defaultFn: this._defRenderFn,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
        fireOnce: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
        ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
    this.fire(&#x27;render&#x27;, ...);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
};</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
    After <code>fireOnce</code> events have been <code>fire()</code>d, any subsequent (late)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
    subscriptions are immediately executed.  This can introduce race
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
    conditions, however, since subscribers might expect to be called at a later
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
    time, after the code that follows the subscription has also executed.  In
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
    this case, you can configure <code>fireOnce</code> events with the <code>async</code> flag
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
    and post-<code>fire</code> subscriptions will be executed in a <code>setTimeout</code>,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
    allowing all subsequent code to run before the late subscriber is notified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
<pre class="code prettyprint">&#x2F;&#x2F; BEFORE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
Y.publish(&#x27;myapp:ready&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
    fireOnce: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
&#x2F;&#x2F; ... elsewhere in the code
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
&#x2F;&#x2F; If myapp:ready has been fired, setStuffUp executes right now, but might
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
&#x2F;&#x2F; expect MyApp.Stuff to be created already.  So, boom.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
Y.on(&#x27;myapp:ready&#x27;, setStuffUp);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
MyApp.Stuff = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
&#x2F;&#x2F; AFTER
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
Y.publish(&#x27;myapp:ready&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
    fireOnce: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
    async   : true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
&#x2F;&#x2F; ... elsewhere in the code
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
&#x2F;&#x2F; Even if myapp:ready has been fired, setStuffUp will execute later. So, no boom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
Y.on(&#x27;myapp:ready&#x27;, setStuffUp);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
MyApp.Stuff = {};</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
<h3 id="bubbling">Bubbling Events</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
    Events that are configured with <code>emitFacade</code> support bubbling to other
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
    <code>EventTarget</code>s, allowing you to subscribe to them from other objects, much
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
    like DOM event bubbling.  Add other <code>EventTarget</code>s to an instance's bubble
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
    path with <code>addTarget</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
<pre class="code prettyprint">function LeafNode() { ... }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
LeafNode.prototype.rename = function (newName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
    var oldName = this.name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
    this.name   = newName;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
    this.fire(&quot;update&quot;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
        prevVal: oldName,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
        newVal : newName
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
function TreeNode() { ... }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
TreeNode.prototype.add = function (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
    this._items.push(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
    &#x2F;&#x2F; The new child node&#x27;s events will bubble to this TreeNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
    node.addTarget(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
Y.augment(LeafNode, Y.EventTarget, true, null, { emitFacade: true });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
Y.augment(TreeNode, Y.EventTarget, true, null, { emitFacade: true });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
var rootNode = new TreeNode(&quot;ROOT&quot;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
    branchA  = new TreeNode(&quot;branchA&quot;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
    leaf1    = new LeafNode(&quot;leaf1&quot;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
rootNode.add(branchA);                 &#x2F;&#x2F;            ROOT
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
rootNode.add( new LeafNode(&quot;leaf2&quot;) ); &#x2F;&#x2F;           &#x2F;    \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
                                       &#x2F;&#x2F;      branchA   leaf2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
branchA.add(leaf1);                    &#x2F;&#x2F;     &#x2F;       \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
branchA.add( new LeafNode(&quot;leaf3&quot;) );  &#x2F;&#x2F;  leaf1     leaf3
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
&#x2F;&#x2F; Subscribe to &#x27;update&#x27; events from any leaf or tree node under root
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
rootNode.on(&#x27;update&#x27;, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
    alert(e.prevVal + &quot; has been renamed &quot; + e.newVal);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
leaf1.rename(&quot;Flower!&quot;); &#x2F;&#x2F; ==&gt; &quot;leaf1 has been renamed Flower!&quot;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
<h3 id="prefix">Event Prefixes</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
    Individual events or all events fired by an <code>EventTarget</code> can be configured
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
    to include a prefix to help filter subscriptions to common event names by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
    their origin. Prefixed event names look like <code>&#x27;prefix:eventName&#x27;</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
    Taking the <a href="#bubbling">code snippet above</a>, configuring a default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
    <code>prefix</code> while augmenting the classes will allow for subscription to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
    only <code>LeafNode</code> updates.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
<pre class="code prettyprint">&#x2F;&#x2F; All events fired by LeafNode instances will be prefixed with &quot;leaf:&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
Y.augment(LeafNode, Y.EventTarget, true, null, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
    emitFacade: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
    prefix: &#x27;leaf&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
&#x2F;&#x2F; ...and for TreeNodes, &quot;tree:&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
Y.augment(TreeNode, Y.EventTarget, true, null, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
    emitFacade: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
    prefix: &#x27;tree&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
&#x2F;&#x2F; Listen specifically for changes from LeafNodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
rootNode.on(&#x27;leaf:update&#x27;, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
    alert(e.prevVal + &quot; has been renamed &quot; + e.newVal);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
leaf1.rename(&quot;Flower!&quot;); &#x2F;&#x2F; ==&gt; &quot;leaf1 has been renamed Flower!&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
branchA.rename(&quot;Chewbacca!&quot;); &#x2F;&#x2F; (nothing)</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
    Subscribing with prefixes is similar to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
    <a href="../event/delegation.html">using DOM event delegation</a>, though it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
    is done using <code>on()</code> rather than <code>delegate()</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
    Optionally, you can omit the prefix when subscribing on the object that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
    fires the event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
<pre class="code prettyprint">&#x2F;&#x2F; prefix is optional when subscribing on the firing object...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
leaf1.on(&#x27;leaf:update&#x27;, worksJustLike);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
leaf1.on(&#x27;update&#x27;, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
    e.type; &#x2F;&#x2F; &#x27;leaf:update&#x27; -- the event type will remain prefixed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
    ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
&#x2F;&#x2F; ...but prefixes are required from other objects
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
rootNode.on(&#x27;update&#x27;, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
    &#x2F;&#x2F; will not capture leaf:update events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
    Subscribe to all events of a specific type, regardless of prefix, using the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
    wildcard prefix <code>*:eventName</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
<pre class="code prettyprint">&#x2F;&#x2F; Execute the callback if either the group object or one of its items fires an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
&#x2F;&#x2F; &#x60;update&#x60; event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
rootNode.on(&#x27;*:update&#x27;, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
    switch (e.type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
        case &quot;leaf:update&quot;: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
        case &quot;tree:update&quot;: ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
<h3 id="defaultFn">Adding Default Behavior</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
    Custom events can be bound to behaviors just like DOM events (e.g. clicking
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
    on a link causes navigation to a new page).  This is especially useful when
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
    doing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
    <a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete">CRUD</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
    operations that you want to expose to other objects in your system to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
    prevent, alter, or enhance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
    Add a default behavior to an event by configuring the event's <code>defaultFn</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
    By convention, default functions are named <code>_def(the name of the event)Fn</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
<pre class="code prettyprint">function TreeNode(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
    this.name   = name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
    this._items = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
    &#x2F;&#x2F; Event publishing is typically done during instantiation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
    this.publish(&#x27;add&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
        defaultFn: this._defAddFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
&#x2F;&#x2F; Adding a child node is an interesting mutation operation. Move the mutation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
&#x2F;&#x2F; logic from the method to a mutation event&#x27;s default behavior
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
TreeNode.prototype.add = function (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
    this.fire(&#x27;add&#x27;, { newNode: node });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
&#x2F;&#x2F; Default functions receive the event facade like other subscribers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
TreeNode.prototype._defAddFn = function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
    this._items.push(e.newNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
    e.newNode.addTarget(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
branchA.add(leaf1); &#x2F;&#x2F; without &#x27;add&#x27; subscriptions, the behavior is the same</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
    Unless configured with <code>preventable: false</code>, default behaviors can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
    disabled with <code>e.preventDefault()</code> just like the DOM.  Unlike their DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
    counterparts, though, event subscribers <em>can change facade
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
    properties</em> to alter the default behavior by way of effectively changing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
    its input.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
<pre class="code prettyprint">TreeNode.prototype.add = function (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
    this.fire(&#x27;add&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
        newNode: node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
        bubbleEvents: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
&#x2F;&#x2F; Default functions receive the event facade like other subscribers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
TreeNode.prototype._defAddFn = function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
    this._items.push(e.newNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
    if (e.bubbleEvents) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
        e.newNode.addTarget(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
&#x2F;&#x2F; You can prevent default behavior from anywhere along the bubble path
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
rootNode.on(&#x27;tree:add&#x27;, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
    if (e.newNode.name === &quot;Leafy&quot;) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
        e.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
    } else if (e.newNode.name === &quot;James Bond&quot;) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
        e.bubbleEvents = false; &#x2F;&#x2F; Shhhh
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
rootNode.add( new LeafNode(&quot;Leafy&quot;) ); &#x2F;&#x2F; Node NOT added
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
rootNode.add( new LeafNode(&quot;James Bond&quot;) ); &#x2F;&#x2F; Node added without event bubbling</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
<h3 id="broadcast">Broadcasting Events to Y or Between YUI instances</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
    Event broadcasting is very similar to bubbling, but with some important
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
    distinctions:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
<ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
        Broadcasting is specific to the YUI instance and the <code>Y.Global</code> shared
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
        <code>EventTarget</code>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
    <li>Events don't need to be configured with <code>emitFacade</code> to broadcast</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
    <li>Broadcasting happens after the default behavior, which also means...</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
    <li>Event behavior can't be prevented from broadcast subscribers</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
    <li>Broadcast can be defaulted for all events for an <code>EventTarget</code></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
</ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
    Broadcasting is essentially a "fast track" bubbling configuration allowing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
    you to specify that events can be subscribed to from the YUI instance (with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
    <code>broadcast: 1</code>) or from <code>Y.Global</code> (with <code>broadcast: 2</code>).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
<pre class="code prettyprint">&#x2F;&#x2F; All events from instances of MyClass can be subscribed from Y.on()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
Y.augment(MyClass, Y.EventTarget, true, null, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
    emitFacade: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
    prefix: &#x27;awesome&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
    broadcast: 1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
&#x2F;&#x2F; Respond to a &#x27;thing&#x27; event from any instance of MyClass in the YUI sandbox
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
Y.on(&#x27;awesome:song&#x27;, partyOn);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
var instance = new MyClass()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
instance.fire(&quot;song&quot;, { which: &quot;Bohemian Rhapsody&quot;, whom: &quot;Wayne&quot; });</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
    <code>Y.Global</code> is an <code>EventTarget</code> that is shared between all YUI instances,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
    allowing cross-sandbox communication.  To avoid feedback loops, it's best
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
    to add an instance identity to outgoing events and only respond to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
    incoming events from other identities.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
<pre class="code prettyprint">YUI().use(&#x27;node&#x27;, &#x27;event-custom&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
    var id = &quot;Alpha Beta Base&quot;; &#x2F;&#x2F; probably Y.guid() would be safer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
    Y.Global.on(&#x27;message&#x27;, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
        if (e.origin !== id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
            alert(&quot;message received from &quot; + e.origin + &quot;: &quot; + e.message);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   724
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
            murdock.fire(&quot;message&quot;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
                message: &quot;We&#x27;ll get you down.  And down safe.&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
                origin: id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
    function Character() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
        this.publish(&#x27;message&#x27;, { broadcast: 2 });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
        ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
    Y.augment(Character, Y.EventTarget, true, null, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
        emitFacade: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
    var murdock = new Character();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
    Y.one(&#x27;#status&#x27;).on(&#x27;click&#x27;, function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
        murdock.fire(&quot;message&quot;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   745
            message: &quot;You&#x27;re coming in too fast!&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
            origin: id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
YUI().use(&#x27;node&#x27;, &#x27;event-custom&#x27;, function (OtherY) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
    var id = &quot;Lunar Shuttle&quot;;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
    OtherY.Global.on(&#x27;message&#x27;, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
        if (e.origin !== id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
            alert(&quot;message received from &quot; + e.origin + &quot;: &quot; + e.message);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
    function Character() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
        this.publish(&#x27;message&#x27;, { broadcast: 2 });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
    OtherY.augment(Character, OtherY.EventTarget, true, null, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
        emitFacade: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
    var striker = new Character()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
    OtherY.one(&#x27;#report&#x27;).on(&#x27;click&#x27;, function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
        striker.fire(&quot;message&quot;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
            message: &quot;She&#x27;s beginning to crack up&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
            origin: id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   777
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   778
<button id="status" class="yui3-button">Come in, Lunar Shuttle</button>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   779
<button id="report" class="yui3-button">Can you read me, Alpha Beta?</button>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
<script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
YUI().use('node', 'event-custom', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
    var id = "Alpha Beta Base"; // probably Y.guid() would be safer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
    Y.Global.on('message', function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
        if (e.origin !== id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
            alert("message received from " + e.origin + ": " + e.message);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
            murdock.fire("message", {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
                message: "We'll get you down.  And down safe.",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   791
                origin: id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
    function Character() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
        this.publish('message', { broadcast: 2 });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   798
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   799
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   800
    Y.augment(Character, Y.EventTarget, true, null, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
        emitFacade: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   802
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   803
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   804
    var murdock = new Character();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   805
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   806
    Y.one('#status').on('click', function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   807
        murdock.fire("message", {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   808
            message: "You're coming in too fast!",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   809
            origin: id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   810
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   811
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   812
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
YUI().use('node', 'event-custom', function (OtherY) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
    var id = "Lunar Shuttle";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
    OtherY.Global.on('message', function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
        if (e.origin !== id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
            alert("message received from " + e.origin + ": " + e.message);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
    function Character() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
        this.publish('message', { broadcast: 2 });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   825
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
    OtherY.augment(Character, OtherY.EventTarget, true, null, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
        emitFacade: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
    var striker = new Character()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   833
    OtherY.one('#report').on('click', function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   834
        striker.fire("message", {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   835
            message: "She's beginning to crack up",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
            origin: id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   841
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   842
<!--h3>Monitoring Events</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   843
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   844
<p>TODO</p-->
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   847
<h3 id="configs">Available Event Configurations and Defaults</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   849
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   850
    Events can be configured with the following properties. Properties marked
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   851
    as "Class Configurable" can be passed to the <code>EventTarget</code> constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
    configuration to default for all events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   856
<thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
        <th>Configuration</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
        <th>Description</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
        <th>Default</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
        <th>Class Configurable?</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   862
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
</thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   864
<tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
        <td><code>prefix</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   867
        <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   868
            <code>e.type</code> will always include the configured prefix.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   869
            <a href="#prefix">Details above</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
        </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
        <td>(empty)</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
        <td>YES</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   873
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   874
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   875
        <td><code>context</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   876
        <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   877
            The default <code>this</code> object to execute callbacks with. Rarely set.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   878
        </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   879
        <td>The instance</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   880
        <td>YES</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   881
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   882
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   883
        <td><code>emitFacade</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   884
        <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   885
            If <code>true</code>, sends event facades to callbacks, allows bubbling and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   886
            default functions, etc.  This is commonly set to true for a class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   887
            <a href="#facade">Details above</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   888
        </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   889
        <td><code>false</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   890
        <td>YES</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   891
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   892
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   893
        <td><code>fireOnce</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   894
        <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   895
            If <code>true</code>, events will only fire once. Subscriptions made after
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   896
            firing will be immediately executed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   897
            <a href="#once">Details above</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   898
        </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   899
        <td><code>false</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   900
        <td>YES</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   901
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   902
    <!--tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   903
        <td><code>monitored</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   904
        <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   905
            Allows you to subscribe to the event lifecycle moments (publish,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   906
            fire, and subscribe) as separate events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   907
            <a href="#monitor">Details above</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   908
        </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   909
        <td><code>false</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   910
        <td>YES</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   911
    </tr-->
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   912
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   913
        <td><code>broadcast</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   914
        <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   915
            <a href="#broadcast">Details above</a>. Fire the event from:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   916
            <ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   917
                <li><code>0</code> - Only the EventTarget instance</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   918
                <li><code>1</code> - The EventTarget and the YUI instance (<code>Y</code>)</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   919
                <li><code>2</code> - The EventTarget, <code>Y</code>, and <code>Y.Global</code></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   920
            </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   921
        </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   922
        <td>0</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   923
        <td>YES</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   924
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   925
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   926
        <td><code>bubbles</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   927
        <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   928
            For events configured to <code>emitFacade</code> allow bubbling events to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   929
            other <code>EventTarget</code>s.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   930
        </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   931
        <td><code>true</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   932
        <td>YES</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   933
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   934
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   935
        <td><code>defaultFn</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   936
        <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   937
            Behavior associated with the event. Usually this is preventable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   938
            (see <code>preventable</code> below).  <a href="#defaultFn">Details above</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   939
        </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   940
        <td>(none)</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   941
        <td>&nbsp;</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   942
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   943
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   944
        <td><code>preventable</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   945
        <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   946
            If set to <code>false</code>, <code>e.preventDefault()</code> will not disable execution
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   947
            of the event's <code>defaultFn</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   948
        </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   949
        <td><code>true</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   950
        <td>&nbsp;</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   951
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   952
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   953
        <td><code>preventedFn</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   954
        <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   955
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   956
                Behavior associated with the event when <code>e.preventDefault()</code> is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   957
                called from a subscriber.  Use this function to reset partially
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   958
                applied transactional state.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   959
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   960
            <p>Incompatible with <code>preventable: false</code>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   961
        </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   962
        <td>(none)</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   963
        <td>&nbsp;</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   964
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   965
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   966
        <td><code>stoppedFn</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   967
        <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   968
            Behavior associated with the event when <code>e.stopPropagation()</code> is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   969
            called from a subscriber.  Seldom used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   970
        </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   971
        <td>(none)</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   972
        <td>&nbsp;</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   973
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   974
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   975
        <td><code>async</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   976
        <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   977
            Only applicable to events also configured with <code>fireOnce: true</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   978
            If <code>true</code>, new subscriptions to this event after it has already 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   979
            been fired will be queued to execute in a <code>setTimeout</code> instead of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   980
            immediately (synchronously).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   981
        </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   982
        <td>false</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   983
        <td>&nbsp;</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   984
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   985
</tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   986
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   987
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   988
<h3 id="after">The "after" phase</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   989
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   990
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   991
    Unlike DOM events, custom events also expose an "after" phase that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   992
    corresponds to the time immediately after an event's <a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   993
    href="#defaultFn">default behavior</a> executes.  Subscribe to an event's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   994
    "after" phase with the <code>after(...)</code> method. The signature is the same as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   995
    <code>on(...)</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   996
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   997
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   998
<pre class="code prettyprint">rootNode.after(&#x27;tree:add&#x27;, calc.updateTotals, calc);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   999
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1000
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1001
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1002
    The primary benefit of using <code>after()</code> subscriptions over <code>on()</code>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1003
    subscriptions is that if any <code>on()</code> subscribers call <code>e.preventDefault()</code>,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1004
    neither the event's configured <code>defaultFn</code> <em>nor the <code>after()</code>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1005
    subscribers</em> will be executed.  If an <code>after()</code> subscription is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1006
    executed, you know that the <code>defaultFn</code> did as well.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1007
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1008
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1009
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1010
    <strong>Use <code>after()</code> to subscribe to events with a default behavior when
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1011
    you want to react to the event with a side effect.</strong>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1012
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1013
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1014
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1015
    <strong>Use <code>on()</code> to subscribe to events if you need to prevent or alter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1016
    the default behavior or if they don't have default behavior.</strong>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1017
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1018
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1019
<h2 id="event-lifecycle">Event Lifecycle</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1020
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1021
<p>The order of operations when firing an event is as follows:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1022
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1023
<h3 id="simple-event-lifecycle">Simple Events (no facade)</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1024
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1025
<ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1026
    <li><code>on()</code> subscribers are executed</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1027
    <li><code>after()</code> subscribers are executed</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1028
    <li><code>Y.on()</code> broadcast subscribers are executed.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1029
    <li><code>Y.after()</code> broadcast subscribers are executed.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1030
    <li><code>Y.Global.on()</code> broadcast subscribers are executed.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1031
    <li><code>Y.Global.after()</code> broadcast subscribers are executed.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1032
</ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1033
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1034
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1035
    If an <code>on()</code> or <code>after()</code> subscriber returns <code>false</code>, no more subscribers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1036
    will be notified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1037
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1038
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1039
<h3 id="complex-event-lifecycle">Complex Events (with facade)</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1040
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1041
<ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1042
    <li><code>on()</code> subscribers are executed</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1043
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1044
        <code>on()</code> subscribers for each bubble target and their respective targets
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1045
        are executed until all targets' bubble paths are walked or a subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1046
        stops the propagation of the event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1047
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1048
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1049
        If the event was prevented, any configured <code>preventedFn</code> will execute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1050
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1051
    <li>If not prevented, any configured <code>defaultFn</code> will execute.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1052
    <li>If bubbling was stopped, any configured <code>stoppedFn</code> will execute.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1053
    <li><code>Y.on()</code> broadcast subscribers are executed.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1054
    <li><code>Y.after()</code> broadcast subscribers are executed.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1055
    <li><code>Y.Global.on()</code> broadcast subscribers are executed.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1056
    <li><code>Y.Global.after()</code> broadcast subscribers are executed.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1057
    <li><code>after()</code> subscribers are executed.</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1058
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1059
        <code>after()</code> subscribers for each bubble target and their respective
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1060
        targets are executed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1061
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1062
</ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1063
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1064
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1065
    The flow can be interrupted by <code>on()</code> subscribers doing any of these
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1066
    things:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1067
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1068
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1069
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1070
    <dt><code>e.preventDefault()</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1071
        <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1072
            <ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1073
                <li>The <code>defaultFn</code> will not be executed</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1074
                <li>The <code>preventedFn</code> will execute</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1075
                <li>No <code>after()</code> subscriptions will be executed</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1076
            </ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1077
        </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1078
    <dt><code>e.stopPropagation()</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1079
        <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1080
            <ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1081
                <li>The remainder of subscribers at this <code>EventTarget</code> <strong>WILL</strong> execute</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1082
                <li>No bubble targets of this <code>EventTarget</code> will be notified</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1083
                <li>The <code>stoppedFn</code> will execute</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1084
                <li>The <code>defaultFn</code> and <code>after()</code> subscribers will execute</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1085
            </ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1086
        </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1087
    <dt><code>e.stopImmediatePropagation()</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1088
        <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1089
            Same as <code>e.stopPropagation()</code> except no more subscribers at this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1090
            <code>EventTarget</code> will execute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1091
        </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1092
    <dt><code>e.halt()</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1093
        <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1094
            Same as <code>e.preventDefault()</code> plus <code>e.stopPropagation()</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1095
        </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1096
    <dt><code>e.halt(true)</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1097
        <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1098
            Same as <code>e.preventDefault()</code> plus <code>e.stopImmediatePropagation()</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1099
        </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1100
    <dt><code>return false</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1101
        <dd>Same as <code>e.halt(true)</code>.  Not recommended.  Use the API methods.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1102
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1103
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1104
<!--h2 class="no-toc">Subscribing to Object Methods with <code>Y.Do.*</code></h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1106
<h3 class="no-toc">Before and After</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1107
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1108
<h3 class="no-toc">Altering the Wrapped Method Behavior</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1109
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1110
<h3 class="no-toc"><code>EventTarget</code> API methods</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1111
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1112
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1113
    TODO
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1114
</p-->
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1115
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1116
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1117
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1118
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1119
        <div class="yui3-u-1-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1120
            <div class="sidebar">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1121
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1122
                    <div id="toc" class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1123
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1124
                            <h2 class="no-toc">Table of Contents</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1125
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1126
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1127
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1128
                            <ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1129
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1130
<a href="#getting-started">Getting Started</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1131
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1132
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1133
<a href="#video-overview">Video Overview</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1134
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1135
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1136
<a href="#the-basics">The Basics</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1137
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1138
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1139
<a href="#subscribing-to-events">Subscribing to Events</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1140
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1141
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1142
<a href="#fire">Firing Events</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1143
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1144
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1145
<a href="#callback-arguments-and-event-facades">Callback arguments and event facades</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1146
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1147
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1148
<a href="#detaching-event-subscriptions">Detaching Event Subscriptions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1149
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1150
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1151
<a href="#extend-event-target">Extending EventTarget</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1152
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1153
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1154
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1155
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1156
<a href="#publishing-events">Publishing Events</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1157
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1158
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1159
<a href="#facade">Event Facades</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1160
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1161
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1162
<a href="#once"><code>fireOnce</code> Events</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1163
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1164
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1165
<a href="#bubbling">Bubbling Events</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1166
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1167
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1168
<a href="#prefix">Event Prefixes</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1169
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1170
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1171
<a href="#defaultFn">Adding Default Behavior</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1172
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1173
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1174
<a href="#broadcast">Broadcasting Events to Y or Between YUI instances</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1175
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1176
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1177
<a href="#configs">Available Event Configurations and Defaults</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1178
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1179
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1180
<a href="#after">The "after" phase</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1181
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1182
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1183
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1184
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1185
<a href="#event-lifecycle">Event Lifecycle</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1186
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1187
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1188
<a href="#simple-event-lifecycle">Simple Events (no facade)</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1189
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1190
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1191
<a href="#complex-event-lifecycle">Complex Events (with facade)</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1192
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1193
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1194
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1195
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1196
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1197
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1198
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1199
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1200
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1201
                    <div class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1202
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1203
                            <h2 class="no-toc">Examples</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1204
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1205
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1206
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1207
                            <ul class="examples">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1208
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1209
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1210
                                        <li data-description="Publish an event with a default behavior, as well as behaviors for reacting to preventing the default or stopping bubbling.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1211
                                            <a href="flow-example.html">Custom Event Bubbling and Behaviors</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1212
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1213
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1214
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1215
                            </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1216
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1217
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1218
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1219
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1220
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1221
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1222
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1223
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1224
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1225
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1226
<script src="../assets/vendor/prettify/prettify-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1227
<script>prettyPrint();</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1228
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1229
<script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1230
YUI.Env.Tests = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1231
    examples: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1232
    project: '../assets',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1233
    assets: '../assets/event-custom',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1234
    name: 'event-custom',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1235
    title: 'EventTarget',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1236
    newWindow: '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1237
    auto:  false 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1238
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1239
YUI.Env.Tests.examples.push('flow-example');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1240
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1241
</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1242
<script src="../assets/yui/test-runner.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1243
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1244
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1245
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1246
</body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1247
</html>