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

A piece of sugar in your client-side development

Embed Size (px)

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.

Citation preview

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