Top Banner
JAVASCRIPT na frontendu Miho Tomić
60

JavaScript

Feb 15, 2016

Download

Documents

birch

JavaScript. n a frontendu. Miho Tomić. 3. JavaScript Evolucija. JavaScript evolucija. JavaScript evolucija. jQuery je odličan. JavaScript evolucija. jQuery je odličan, ali. $.getJSON("/items", function (data) { var list = ""; $.each(data, function (index, value) { - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: JavaScript

JAVASCRIPTna frontendu

Miho Tomić

Page 2: JavaScript

3

JavaScriptEvolucija

Page 3: JavaScript

JAVASCRIPT EVOLUCIJA

Page 4: JavaScript

• jQuery je odličan

JAVASCRIPT EVOLUCIJA

Page 5: JavaScript

$.getJSON("/items", function (data) {

var list = "";$.each(data, function (index, value) {

list += "<li id=\"item-" + value.Id + "\">" + value.Name + "</li>";});$("ul").append(list);

$("li").click(function () {var $this = $(this);var id = $this.attr("id").replace("item-", "");$.post("/items", { id: id }, function () {

$this.fadeOut(function () {$this.remove();

});});

});});

• jQuery je odličan, ali...

JAVASCRIPT EVOLUCIJA

Page 6: JavaScript

$.getJSON("/items", function (data) {

var list = "";$.each(data, function (index, value) { list += "<li id=\"item-" + value.Id + "\">" + value.Name + "</li>";});$("ul").append(list);

$("li").click(function () {var $this = $(this);var id = $this.attr("id").replace("item-", "");$.post("/items", { id: id }, function () {

$this.fadeOut(function () {$this.remove();

});});

});});

• jQuery je odličan, ali...• callback hell

JAVASCRIPT EVOLUCIJA

Page 7: JavaScript

• Apstrakcija

• Razdvajanje UI od podataka

• Pojednostavniti callback

JAVASCRIPT EVOLUCIJA

Što nam je potrebno?

Page 8: JavaScript

Što nam je potrebno?• RESTful servis za rad s podacima

• Eventi

• Template sustav

• Sustav za navigaciju stranicama

• „Maleni” JavaScript framework

JAVASCRIPT EVOLUCIJA

Page 9: JavaScript

Postoji rješenje Javascript framework

Page 10: JavaScript

Knockout.js

CanJS

JavascriptMVC

Cappucino

Sproutcore

Batman.js

Ember.js Angular.js

Agility.jsSammy.js

Fidel

Backbone.js

Page 11: JavaScript
Page 12: JavaScript

Backbone.js

Page 13: JavaScript

Nudi strukturu web aplikaciji: • Model

• Collection

• View

BACKBONE.JS

Page 14: JavaScript

• jQuery

• Underscore.js

• Json2.js

BACKBONE.JS

Page 15: JavaScript

MVC

Model / CollectionTemplate (View)View (Controller)Router

BACKBONE.JS

Page 16: JavaScript

MVC

Model / Collection

Template (View)View (Controller)Router

BACKBONE.JS

Page 17: JavaScript

MVC

Model / CollectionTemplate (View)

View (Controller)Router

BACKBONE.JS

Page 18: JavaScript

MVC

Router

BACKBONE.JS

Model / CollectionTemplate (View)View (Controller)

Page 19: JavaScript

MVC

BACKBONE.JS

Model / CollectionTemplate (View)View (Controller)Router

Page 20: JavaScript

• Predstavlja podatke

• Perzistencija

• Eventi

MODEL

Page 21: JavaScript

Backbone.jsModel / Collection - View - Template - Router

Model

• Fetch HTTP GET /url

• Save (novi) HTTP POST /url

• Save HTTP PUT /url/id• Destroy HTTP DELETE /url/id

Page 22: JavaScript

var Item = Backbone.Model.extend({idAttribute: “id”,

url: “/items”});

Backbone.jsModel / Collection - View - Template - Router

Page 23: JavaScript

var item = new Item();item.set({name: “Appstart”

}); // trigger event changeitem.save(); // trigger event sync

Backbone.jsModel / Collection - View - Template - Router

Page 24: JavaScript

Collection• Lista modela• Underscore metode

Page 25: JavaScript

var Items = Backbone.Collection.extend({model: Item,url:

"/items"});

Backbone.jsModel / Collection - View - Template - Router

Page 26: JavaScript

var items = new Items();items.fetch(); // trigger reset

Backbone.jsModel / Collection - View - Template - Router

Page 27: JavaScript

View• Manipulacija DOM-a

• Delegira DOM evente• Sadrži Model / Collection

Page 28: JavaScript

Backbone.jsModel / Collection - View - Template - Router

View

View (Collection)

View (Model)

Page 29: JavaScript

var ListView = Backbone.View.extend({ el: $("ul"),

initialize: function () { this.collection.bind("reset", this.render, this);},render: function () {this.collection.each(this.addItem, this);return this;

},addItem: function (item) {var itemView = new ItemView({ var ItemView = Backbone.View.extend({

model: item tagName: "li",}); render: function () {

this.$el.append(itemView.el); this.$el.text(this.model.get("Name"));itemView.render(); return this;} }

}); });

Backbone.jsModel / Collection - View - Template - Router

Page 30: JavaScript

var ListView = Backbone.View.extend({el: $("ul"),initialize: function () {this.collection.bind("reset", this.render, this);},render: function () {this.collection.each(this.addItem, this);return this;},addItem: function (item) {var itemView = new ItemView({ var ItemView = Backbone.View.extend({

model: item tagName: "li",}); render: function () {this.$el.append(itemView.el); this.$el.text(this.model.get("Name"));itemView.render(); return this;

} }}); });

Backbone.jsModel / Collection - View - Template - Router

Page 31: JavaScript

var ListView = Backbone.View.extend({ el: $("ul"),

initialize: function () {this.collection.bind("reset", this.render, this);

},render: function () {this.collection.each(this.addItem, this);return this;},addItem: function (item) {var itemView = new ItemView({ var ItemView = Backbone.View.extend({

model: item tagName: "li",}); render: function () {

this.$el.append(itemView.el); this.$el.text(this.model.get("Name"));itemView.render(); return this;

} }}); });

Backbone.jsModel / Collection - View - Template - Router

Page 32: JavaScript

var ListView = Backbone.View.extend({ el: $("ul"),

initialize: function () {this.collection.bind("reset", this.render, this);

},render: function () {this.collection.each(this.addItem, this);return this;},addItem: function (item) {var itemView = new ItemView({ var ItemView = Backbone.View.extend({

model: item tagName: "li",}); render: function () {

this.$el.append(itemView.el); this.$el.text(this.model.get("Name"));itemView.render(); return this;

} }}); });

Backbone.jsModel / Collection - View - Template - Router

Page 33: JavaScript

var ListView = Backbone.View.extend({ el: $("ul"),

initialize: function () {this.collection.bind("reset", this.render, this);},render: function () {this.collection.each(this.addItem, this);return this;},addItem: function (item) {var itemView = new ItemView({ var ItemView = Backbone.View.extend({

model: item tagName: "li",}); render: function () {this.$el.append(itemView.el); this.$el.text(this.model.get("Name"));itemView.render(); return this;

} }}); });

Backbone.jsModel / Collection - View - Template - Router

Page 34: JavaScript

var ListView = Backbone.View.extend({ el: $("ul"),

initialize: function () {this.collection.bind("reset", this.render, this);},render: function () {this.collection.each(this.addItem, this);return this;},addItem: function (item) {var itemView = new ItemView({ var ItemView = Backbone.View.extend({

model: item tagName: "li",}); render: function () {

this.$el.append(itemView.el); this.$el.text(this.model.get("Name"));itemView.render(); return this;

} }}); });

Backbone.jsModel / Collection - View - Template - Router

Page 35: JavaScript

});

var items = new Items();var listView = new ListView({

collection: items

items.fetch();

Backbone.jsModel / Collection - View - Template - Router

Page 36: JavaScript

Template (Underscore.js)

JavaScript template služe za prikaz podataka modela.

• Mustache• HandleBars

Page 37: JavaScript

Backbone.jsModel / Collection - View - Template - Router

<script type="text/template" id="item-template"> <li>

<%= name %></li></script>

Page 38: JavaScript

var ItemView = Backbone.View.extend({…template: _.template($("#item-template").html()),

render: function () {this.$el.html(this.template(this.model.toJSON()));return this;}…

});

Backbone.jsModel / Collection - View - Template - Router

Page 39: JavaScript

Router• Mapiranje url u funkcije• Omogućuje povijest

Page 40: JavaScript

Backbone.jsModel / Collection - View - Template - Router

var AppRouter = Backbone.Router.extend({ routes: {

"": "initialize“},initialize: function () {…

}});

Page 41: JavaScript

Backbone.js

Linkedin

Page 42: JavaScript

Backbone.js

FourSquare

Page 43: JavaScript

Backbone.js

Groupon

Page 44: JavaScript

Backbone.js

+• Malen• Moćan• Kod je čist (lako se održava)

-• Presložen (kod manjih aplikacija)• Nije pravi framework

Page 45: JavaScript

3

AngularJS

Page 46: JavaScript

• MVC framework

ANGULARJS

Page 47: JavaScript

• MVC framework

• namijenjen CRUD aplikacijama

ANGULARJS

Page 48: JavaScript

• MVC framework

• Namijenjen CRUD aplikacijama

• Two – way povezivanje podataka

ANGULARJS

Page 49: JavaScript

• MVC framework

• Namijenjen CRUD aplikacijama

• Two – way povezivanje podataka• Dependency injection

ANGULARJS

Page 50: JavaScript

• MVC framework

• Namijenjen CRUD aplikacijama

• Two – way povezivanje podataka• Dependency injection• Direktive

ANGULARJS

Page 51: JavaScript

• MVC framework

• Namijenjen CRUD aplikacijama

• Two – way povezivanje podataka• Dependency injection• Direktive• Testiranje

ANGULARJS

Page 52: JavaScript

3

Libraries

Page 53: JavaScript

• Twitter Bootstrap

• Highcharts.js

• Jasmine.js

• Require.js

LIBRARIES

Page 54: JavaScript

Tools

Page 55: JavaScript

• IntelliJ IDEA / WebStorm

• Chrome Developers Tools

• Pagespeed

TOOLS

Page 56: JavaScript

F5

TOOLS

Page 57: JavaScript

3

Tips &Tricks

Page 58: JavaScript

Tips & Tricks

Nije cilj naučiti sve frameworke!

Page 59: JavaScript

Tips & Tricks

Angular ili BackBone?

Page 60: JavaScript

[email protected]

PITANJA?Hvala na pažnji