Download - Organizing jQuery Projects Without OO

Transcript
Page 1: Organizing jQuery Projects Without OO

{ Evented...

Page 2: Organizing jQuery Projects Without OO

Why You Shouldn’t Write

OO jQuery

Page 3: Organizing jQuery Projects Without OO

Why You Shouldn’t Write

OO jQueryTroll

Page 4: Organizing jQuery Projects Without OO

Organization

Page 5: Organizing jQuery Projects Without OO

Organization

X

Page 6: Organizing jQuery Projects Without OO

Code Reuse

Page 7: Organizing jQuery Projects Without OO

We’re Used to It

Page 8: Organizing jQuery Projects Without OO

Strategy

Page 9: Organizing jQuery Projects Without OO

Widget

Page 10: Organizing jQuery Projects Without OO

Widget

Page 11: Organizing jQuery Projects Without OO

Widget

Page 12: Organizing jQuery Projects Without OO

Widgetfunction function function

Page 13: Organizing jQuery Projects Without OO

Widget

AjaxWidget

Page 14: Organizing jQuery Projects Without OO

Widget

AjaxWidget

HistoryAjaxWidget

Page 15: Organizing jQuery Projects Without OO

Widget

AjaxWidget

HistoryAjaxWidget

super

Page 16: Organizing jQuery Projects Without OO

Widget

AjaxWidget

HistoryAjaxWidget

super

super

Page 17: Organizing jQuery Projects Without OO
Page 18: Organizing jQuery Projects Without OO

Widget

AjaxWidget

Page 19: Organizing jQuery Projects Without OO

Widget

AjaxWidget HistoryWidget

Widget

Page 20: Organizing jQuery Projects Without OO

Composability

Page 21: Organizing jQuery Projects Without OO

ComposabilityX

Page 22: Organizing jQuery Projects Without OO

OO Code in JS is Crippled

Evented Code

Page 23: Organizing jQuery Projects Without OO

Instead of calling a method

Page 24: Organizing jQuery Projects Without OO

{widget.activate();

Page 25: Organizing jQuery Projects Without OO

Widget

User Code

Page 26: Organizing jQuery Projects Without OO

Widget

User Code

1:1

Page 27: Organizing jQuery Projects Without OO

Widget

User Code

1:1 Sync

Page 28: Organizing jQuery Projects Without OO

Trigger an Event

Page 29: Organizing jQuery Projects Without OO

}element.trigger("activate")

Page 30: Organizing jQuery Projects Without OO

Listener

User Code

Listener Listener

Page 31: Organizing jQuery Projects Without OO

Advantages

Page 32: Organizing jQuery Projects Without OO

Familiar Model

Page 33: Organizing jQuery Projects Without OO

{$("div").click(function() { // do stuff})

Page 34: Organizing jQuery Projects Without OO

Evented Code Fits More

Cleanly with Requirements

Page 35: Organizing jQuery Projects Without OO

“When the user picks an item

from the autocompleter”

Page 36: Organizing jQuery Projects Without OO

Real Example

Page 37: Organizing jQuery Projects Without OO

Caveat: Simple Technique

Page 38: Organizing jQuery Projects Without OO

I’ve Used This Technique on Large Projects

Page 39: Organizing jQuery Projects Without OO

Tabs

Page 40: Organizing jQuery Projects Without OO
Page 41: Organizing jQuery Projects Without OO

div.ui-tabs

Page 42: Organizing jQuery Projects Without OO

div.ui-tabs

keypressclick

Page 43: Organizing jQuery Projects Without OO

div.ui-tabs

keypressclick

tabactivate

Page 44: Organizing jQuery Projects Without OO

div.ui-tabs

keypressclick

tabactivate

Page 45: Organizing jQuery Projects Without OO

div.ui-tabs

keypressclick

tabactivate

Page 46: Organizing jQuery Projects Without OO

tabactivate

default

a) open paneb) mark tab selected

analogy: typing in text box triggers a change event

Page 47: Organizing jQuery Projects Without OO

tabactivate

default

a) open paneb) mark tab selected

return false

Page 48: Organizing jQuery Projects Without OO

Tech in the Example

Page 49: Organizing jQuery Projects Without OO

Arista Theme

Page 50: Organizing jQuery Projects Without OO

Sass and Compass

Page 51: Organizing jQuery Projects Without OO

(try to avoid using JS to set

up layouts)

Page 52: Organizing jQuery Projects Without OO

Staticmatic

Page 53: Organizing jQuery Projects Without OO

jQuery BBQ(Ben Alman)

Page 54: Organizing jQuery Projects Without OO

Demo