advanced rails ajax techniques - script.aculo.usmir.aculo.us/stuff/cor_20060413_railsajax.pdf ·...

69
Advanced Rails AJAX techniques Thomas Fuchs

Upload: others

Post on 29-Mar-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Advanced Rails AJAX techniques

Thomas Fuchs

Page 2: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Thomas Fuchs

• wollzelle• Core team member of

Ruby on Rails

• script.aculo.us

• mir.aculo.us

Page 3: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

• Branding/Design/Web

• fluxiom (yes, we‘ll get to see it)

• http://www.wollzelle.com/

Page 4: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

The tools

Page 5: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

JavaScript,as seen by the browser

Source: http://www.pollux.franken.de/KNF/

Page 6: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

JavaScript,as seen by the developer

From 2001: A Space Odyssey

Page 7: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Concentrate on your application…

Page 8: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

…and not onbrowser bugs.

Page 9: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Source: http://threadless.com/submission/46364/It

Page 10: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

1.5

Page 11: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

JavaScript, minus the „WTF?“

Page 12: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

AJAX

Page 13: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Enumerables

Page 14: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

$ and $$

Page 15: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada
Page 16: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Direct Element extensions

Page 17: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

vs

Prototype 1.4

Prototype 1.5

Page 18: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Events

Page 19: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

1.6

Page 20: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Visual effects

Page 21: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Drag and Drop

Page 22: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Ready-to-use controls

Page 23: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Plus some extrasJavaScript unit testing, DOM Builder

Page 24: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

On-the-fly JavaScript:Rails JavaScript

Templates

Page 25: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Rails Ajax:

A HistoryLast Spike of the CPR - Craigellachie, British Columbia, Canada

Courtesy of the National Library and Archives of Canada

Page 26: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Rails Ajax: A HistoryIdeas to make the

web snappierLate 20th century

Prototype 1.0,Rails Helpers

Rails 0.11, March 22, 2005

Prototype 1.3,script.aculo.us released

Rails 0.13, July 6, 2005

Prototype 1.4, script.aculo.us 1.5

Rails 1.0, December 13, 2005

Rails JavaScript templates,Prototype 1.5, script.aculo.us 1.6

Rails 1.1, March 28, 2006

In just one year

Page 27: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Ruby on RailsRJS Templates

+

Page 28: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

No JavaScript programming necessary

Page 29: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

(might have something to do with David)

Danish flag

Page 30: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Say it in Ruby

generates JavaScript:

Page 31: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

What it does

blah.rjsgeneratesJavaScript

„blah“ actiongets called

Prototype sees„text/javascript“HTTP header

and evalsJavaScript

Pure Ruby!

Page 32: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Of course,just think of it as magic.

Sam Stephenson,author of Prototype

Page 33: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

replaceReplaces complete element

Page 34: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

replace_htmlReplaces contents of an element

same as

Page 35: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Staying DRY

equivalent to

Refreshes contents of element „list“ withthe partial of the same name

Page 36: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

insert_html

page.sortable re-inits the sortable list so thenewly added item is recognized

Insert content at specific positions within an element

Page 37: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

selectCSS selector-based loops

Page 38: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

selectadvanced Prototype enumerables

creates a JavaScript „t“ variable, containing the result

Page 39: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

selectadvanced Prototype enumerables

creates „h“ variable, containing an Array of elements(that are visible)

Page 40: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

selectusing Prototype to inspect stuff

Page 41: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

<<Reuse plain JavaScript

Page 42: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

delay

Page 43: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Prototype/script.aculo.usElement extensions

Page 44: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Chains

Hide the first element thatis a „P“ and has a class „hint“:

Page 45: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

script.aculo.us

Visual Effects

:appear, :fade, :slide_up, :slide_down, :blind_up, :blind_down, :pulsate, :switch_off,

:puff and more

(or DIY)

Page 46: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

script.aculo.us

Drag & Drop

Page 47: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Call your own

RJS

JavaScript

Page 48: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

render :update(controller-based)

Page 49: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

RJS helpersHelper:

Call in .rjs:

Page 50: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

redirect_to

(takes url_for syntax)

Page 51: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

respond_to

one action for Ajax…

…and non-Ajax calls

Page 52: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Helpful hints, built-in

config/environments/development.rb:

Page 53: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

API Documentation

ActionView::Helpers::PrototypeHelper

and

ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods

Page 54: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

What about debugging?

Page 55: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

No rocket surgery,either.

Page 56: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

The first rule of AJAX

debugging:Use Firefox

Page 57: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

+Extensions

The second rule of AJAX

debugging:Use Firefox

Page 58: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Firebug

Page 59: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Firebug

Page 60: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Web DeveloperExtension

Page 61: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Venkman JavaScript Debugger

Page 62: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Tamperdata

Page 63: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

The third rule:

Test with all browsers

you want to support

Page 64: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Safari Web Inspector

Page 66: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

„It‘s more like Web 3.0“

Page 67: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada
Page 69: Advanced Rails AJAX techniques - script.aculo.usmir.aculo.us/stuff/COR_20060413_RailsAjax.pdf · Rails Ajax: A History Last Spik e of the CPR - Craigellachie , British Columbia, Canada

Launching April 2006www.fluxiom.com