The document discusses the evolution of event handling in JavaScript libraries like YUI. It shows how early approaches involved multiple ways of attaching event handlers and a lack of normalization. YUI 2 introduced a normalized subscription model but event handling was not fully normalized. YUI 3 further improved on this with a fully normalized subscription and event handling model using DOM-like syntax and contexts. It also discusses how YUI 3 extended this model to custom events, introducing features like default behaviors, payloads and control over bubbling to make custom events behave more like DOM events.
13. function doSomething(e) {
if (e && e.preventDefault) {
e.preventDefault();
}
return false;
}
YUICONF 2009
Monday, January 17, 2011
14. function doSomething(e) {
if (e && e.preventDefault) {
e.preventDefault();
}
return false;
}
YUICONF 2009
Monday, January 17, 2011
15. function doSomething(e) {
if (e && e.preventDefault) {
e.preventDefault();
}
return false;
}
We've been through this
YUICONF 2009
Monday, January 17, 2011
59. instance.on("start", doSomething);
this.fire("start"); execute subscribers
end yes prevented?
_defStartFn no
YUICONF 2009
Monday, January 17, 2011
60. prevented? Behavior is preventable
function doSomething(e) {
if (e.urgency === 'ASAP') {
e.preventDefault();
}
}
YUICONF 2009
Monday, January 17, 2011
61. ... but it doesn't have to be
initializer: function () {
this.publish("start", {
defaultFn: this._defStartFn,
preventable: false
});
}
YUICONF 2009
Monday, January 17, 2011
62. ... but it doesn't have to be
initializer: function () {
this.publish("start", {
defaultFn: this._defStartFn,
preventedFn: this._prvStartFn
});
}
YUICONF 2009
Monday, January 17, 2011
87. Dogfood
Drag and Drop
var draggable = new Y.DD.Drag({
node: '#dragme'
});
draggable.on('start', doSomething);
YUICONF 2009
Monday, January 17, 2011
88. Dogfood
Drag and Drop
var draggable = new Y.DD.Drag({
node: '#dragme'
});
Y.DD.DDM.on('drag:start', doSomething);
YUICONF 2009
Monday, January 17, 2011
106. Above and beyond
✓ Subscription context override
✓ Subscription payload
- Easy event detach
- "After" subscriptions
- New DOM events
YUICONF 2009
Monday, January 17, 2011
107. Above and beyond
✓ Subscription context override
✓ Subscription payload
- Easy event detach
- "After" subscriptions
- New DOM events
YUICONF 2009
Monday, January 17, 2011
108. Handles and categories
button.detach("click", doSomething);
YUICONF 2009
Monday, January 17, 2011
109. Handles and categories
button.detach("click", doSomething);
var sub = button.on("click", doSomething);
sub.detach();
YUICONF 2009
Monday, January 17, 2011
110. Handles and categories
button.detach("click", doSomething);
var sub = button.on("click", doSomething);
sub.detach();
button.on("my-cat|click", doSomething);
button.detach("my-cat|click");
YUICONF 2009
Monday, January 17, 2011
111. Handles and categories
button.detach("click", doSomething);
var sub = button.on("click", doSomething);
sub.detach();
widget.on("guid|xChange", handleXChange);
widget.on("guid|yChange", handleYChange);
widget.detach("guid|*");
YUICONF 2009
Monday, January 17, 2011
112. Above and beyond
✓ Subscription context override
✓ Subscription payload
✓ Easy event detach
- "After" subscriptions
- New DOM events
YUICONF 2009
Monday, January 17, 2011
113. Above and beyond
✓ Subscription context override
✓ Subscription payload
✓ Easy event detach
- "After" subscriptions
- New DOM events
YUICONF 2009
Monday, January 17, 2011
116. Y.Base
✓ Event API
✓ Attributes After moments
✓ Plugins
this.after("attrChange", this._updateUI);
YUICONF 2009
Monday, January 17, 2011
117. Y.Base
✓ Event API
✓ Attributes After moments
✓ Plugins
this.after("attrChange", this._updateUI);
Side effects of a state change
YUICONF 2009
Monday, January 17, 2011
119. State UNCHANGED
event instance.on(event,handler)
_defEventFn
instance.after(event,handler)
instance
YUICONF 2009
Monday, January 17, 2011
120. State UNCHANGED
event instance.on(event,handler)
Change state _defEventFn
instance.after(event,handler)
instance
YUICONF 2009
Monday, January 17, 2011
121. State UNCHANGED
event instance.on(event,handler)
Change state _defEventFn
instance.after(event,handler)
State CHANGED
instance
YUICONF 2009
Monday, January 17, 2011