a piece of sugar in your client-side development

40
A piece of sugar in your client-side development Nicolas Blanco Novagile team

Upload: nicolas-blanco

Post on 17-May-2015

11.827 views

Category:

Documents


1 download

DESCRIPTION

Client side development can be fun! Discover some of the new HTML5 features, JS good practices and Backbone.js to create rich client applications.

TRANSCRIPT

Page 1: A piece of sugar in your client-side development

A piece of sugar in your client-side development

Nicolas BlancoNovagile team

Page 2: A piece of sugar in your client-side development

JavaScript ?

Page 3: A piece of sugar in your client-side development

JavaScript ?

Page 4: A piece of sugar in your client-side development

HTML 5

Page 5: A piece of sugar in your client-side development

<form>

<input type=‘text’ ... />

<input type=‘checkbox’ ... />

<input type=‘password’ ... />

<input type=‘submit’ ... />

Page 6: A piece of sugar in your client-side development

<form>

Page 7: A piece of sugar in your client-side development

<form>

Page 8: A piece of sugar in your client-side development

<form>

<input type=‘text’ ... />

<input type=‘text’ placeholder=‘Entrez votre nom...’ ... />

<input type=‘text’ autofocus ... />

<input type=‘text’ required ... />

<input type=‘text’ pattern=’[0-9]’ ... />

Page 9: A piece of sugar in your client-side development

<form><input type=‘email’ ... />

<input type=‘url’ ... />

<input type=‘search’ ... />

Page 10: A piece of sugar in your client-side development

<form>

<input type=‘number’min=’0’

max=’10’step=’2’ ... />

Page 11: A piece of sugar in your client-side development

<form>

<input type=‘range’min=’0’

max=’10’step=’2’ ... />

Page 12: A piece of sugar in your client-side development

<form><input type="date" ... />

<type="month" ... /><input type="week" ... /><input type="time" ... />

<input type="datetime" ... /><input type="datetime-local" ... />

Page 13: A piece of sugar in your client-side development

<form>

Page 14: A piece of sugar in your client-side development

<form>

flowplayer

≠ jQuery UI

Page 15: A piece of sugar in your client-side development

<form>jQuery Tools Form Validator

$(‘form.validator’).validator();

Page 16: A piece of sugar in your client-side development

<form>$(":date").dateinput();

Page 17: A piece of sugar in your client-side development

<form>HTML 5 new forms input

+jQuery TOOLS

=

Page 18: A piece of sugar in your client-side development

MUST DO&HAVE!!!Obtrusive JavaScript ???

<a href=’...’ onclick=‘...’ / ...><form onsubmit=’...’ / ...>

=

Page 19: A piece of sugar in your client-side development

MUST DO&HAVE!!!UNobtrusive JavaScript

«Events» programming

Page 20: A piece of sugar in your client-side development

MUST DO&HAVE!!!

Page 21: A piece of sugar in your client-side development

MUST DO&HAVE!!!

Page 22: A piece of sugar in your client-side development

MUST DO&HAVE!!!

Closure Compiler YUI Compressor

Page 23: A piece of sugar in your client-side development

So... JavaScript ?

Page 24: A piece of sugar in your client-side development

CoffeeScript

« It’s just JavaScript! »

Page 25: A piece of sugar in your client-side development

CoffeeScript

math = root: Math.sqrt square: square cube: (x) -> x * square x alert "I knew it!" if elvis?

$(document).ready -> alert "hello world!"

math = { root: Math.sqrt, square: square, cube: function(x) { return x * square(x); }};

if (typeof elvis != "undefined" && elvis !== null) { alert("I knew it!");}

$(document).ready(function() { alert("hello world!");});

Page 26: A piece of sugar in your client-side development

CoffeeScript1.0

Easy to convert JS => CS«no conflict»

Readable «compiled» code«compiled» code passes JSLint

Rails :automatic compilation with the Barista plugin

good architecture : CS code in the «app» directory

Page 27: A piece of sugar in your client-side development

underscore.js

Small < 4 kb!

Page 28: A piece of sugar in your client-side development

underscore.js

JS :

_([1, 2, 3]).map(function(n) { return n * 2; });

CS :

_([1, 2, 3]).map (n) -> n * 2

[1, 2, 3] => [2, 4, 6]

Page 29: A piece of sugar in your client-side development

underscore.jsHelloTemplate = _.template(‘<h1>Bonjour <%= first_name %> <%= last_name %> !</h1>’)

greatRubyDev = { first_name: ‘Nicolas’, last_name: ‘Blanco’ }

HelloTemplate(greatRubyDev)

<h1>Bonjour Nicolas Blanco !</h1>

Page 30: A piece of sugar in your client-side development

Rich clientAjax

Communication with server

Page 31: A piece of sugar in your client-side development

Rich client

Page 32: A piece of sugar in your client-side development

backbone.js

Small < 5 kb!

Framework & design independent

Based on underscore.js

Page 33: A piece of sugar in your client-side development

Bookid: 1

Bookid: 2

Bookid: 3

Bookid: 4

Library

BookView

LibraryView

Models

Collection

Views

Page 34: A piece of sugar in your client-side development

Backbone.jsevents

Bookid: 1

«change»

Library«change»

«add»«remove»

Page 35: A piece of sugar in your client-side development

backbone.js

Work best with JSON REST API by convention

/books# => GET : retrieve collection of books

# => POST : create new book

/book/3# => GET : retrieve book id = 3# => PUT : update book id = 3

# => DELETE : destroy book id = 3

Page 36: A piece of sugar in your client-side development

backbone.js

Book = Backbone.Model.extend()

myBook = new Book { author: ‘Victor Hugo’, title: ‘Les Misérables’ }

myBook.get(‘author’)myBook.set(...)

myBook.toJSON()

Page 37: A piece of sugar in your client-side development

backbone.jsLibrary = Backbone.Collection.extend model: Book url: ‘/books’

myLibrary = new Library()myLibrary.fetch()myLibrary.at(0)

myLibrary.each (book) -> ...myLibrary.map (book) -> ...

myBook.save() // if validations pass

Page 38: A piece of sugar in your client-side development

backbone.jsBookView = Backbone.View.extend tagName: ‘li’ className: ‘book’ template: _.template ‘<%= author %> - <%= title %>’ initialize: -> _.bindAll this, ‘render’ this.model.bind ‘change’, this.render

render: -> $(this.el).html(this.template(this.model.toJSON())) this

Page 39: A piece of sugar in your client-side development

backbone.js

myBookView = new BookView(model: myBook)

myBookView.render() // <li class=‘book’>Victor Hugo - Les Misérables</li>

myBook.set { author: ‘Nicolas’ } // triggers ‘change’ event

Page 40: A piece of sugar in your client-side development

Thank you!

follow me on twitter :@slainer68