angular ember backbone - jfokus · 2019-09-11 · angular ember backbone 3 1 2 3. angularjs....

73
Angularvs Embervs Backbone (and Knockout) in real applications Joakim Kemeny @joakimkemeny

Upload: others

Post on 21-May-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

AngularvsEmbervsBackbone(and Knockout) in real applications

Joakim Kemeny@joakimkemeny

Page 2: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10
Page 3: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

<h3>Welcome</h3>

<input type="text" ng-model="yourName">

<p ng-if="yourName"> Hello <b>{{ yourName }}</b>!<br> I hope that your Jfokus presentation is going fine.</p>

Page 4: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10
Page 5: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10
Page 6: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

! " # http://127.0.0.1:3000/images/demo5.png

Page 7: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

! " # http://127.0.0.1:3000/images/demo6.png

Page 8: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10
Page 9: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Live demo of working DrinkLab

Page 10: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Backbone.js

Page 11: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Backbone.jsQuick facts

First release 2010, octoberDevelopers Jeremy Ashkenas

Version 1.1.0Size 20 + 14 KB

⋆ Stars 16 940" Forks 3 662

Page 12: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Backbone.jsQuick facts

First release 2010, octoberDevelopers Jeremy Ashkenas

Version 1.1.0Size 20 + 14 KB

⋆ Stars 16 940" Forks 3 662

Model

View

Router

Page 13: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

! " # http://127.0.0.1:3000/demo/demo-web

Live demo showing data binding

Page 14: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

CustomeridNumber, name, streetAddress,

zipCode, city, phone, mobile

Orderstatus, quantity, productionTime

Recipename, mixingTime

RecipeMaterialAmountamount

Materialname, type, price

OrderMaterialamount

Siloname, capacity, isOpen, ...

Scalename, currentWeight, open, ...

Mixername, capacity, currentLevel, ...

CustomeridNumber, name, streetAddress,

zipCode, city, phone, mobile

Orderstatus, quantity, productionTime

Materialname, type, price

OrderMaterialamount

Page 15: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

CustomeridNumber, name, streetAddress,

zipCode, city, phone, mobile

Orderstatus, quantity, productionTime

Recipename, mixingTime

RecipeMaterialAmountamount

Materialname, type, price

OrderMaterialamount

Siloname, capacity, isOpen, ...

Scalename, currentWeight, open, ...

Mixername, capacity, currentLevel, ...

CustomeridNumber, name, streetAddress,

zipCode, city, phone, mobile

Orderstatus, quantity, productionTime

Materialname, type, price

OrderMaterialamount

Page 16: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

// Declare the model and collection ————————————————————————————

DL.Model.Customer = Backbone.Model.extend({

defaults: { city: 'Stockholm' }

});

DL.Collection.Customer = Backbone.Collection.extend({

model: DL.Model.Customer,

url: 'http://localhost:8080/api/customers'

});

Customer

// Get a collection of customers from the server ——————————————

var customers = new DL.Collection.Customer();

customers.fetch({

success: function (customers) {

console.log('Successfully fetched customers');

}

});

// Update a model and save it ——————————————————————————————————

var customer = customers.at(0);

Page 17: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

url: 'http://localhost:8080/api/customers'

});

// Get a collection of customers from the server ——————————————

var customers = new DL.Collection.Customer();

customers.fetch({

success: function (customers) {

console.log('Successfully fetched customers');

}

});

// Update a model and save it ——————————————————————————————————

var customer = customers.at(0);

customer.set({ name: 'Kalle Svensson' });

customer.save({}, {

success: function (customer) {

console.log('Successfully saved a customer');

}

});

Page 18: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

}

});

// Update a model and save it ——————————————————————————————————

var customer = customers.at(0);

customer.set({ name: 'Kalle Svensson' });

customer.save({}, {

success: function (customer) {

console.log('Successfully saved a customer');

}

});

Page 19: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

{

"status": "Created",

"quantity": 1,

"productionTime": "2014-01-10T09:00:00",

"customer": 1,

"recipe": 1,

"materialAmounts": [

{

"amount": 40,

"material": "1"

},

...

]

}

Order data

Page 20: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

// Declare the model and collection of the relation ————————————DL.Model.MaterialAmount = Backbone.Model.extend();DL.Collection.MaterialAmount = Backbone.Collection.extend({ model: DL.Model.MaterialAmount});

// Declare the order model —————————————————————————————————————DL.Model.Order = Backbone.Model.extend({ defaults: { quantity: 1 },

Order

// Declare how our relations should behave ——————————————————— relations: { materialAmounts: DL.Collection.MaterialAmount },

// Override parse to handle relations ———————————————————————— parse: function (response) { for (var key in this.relations) {

Page 21: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

DL.Model.Order = Backbone.Model.extend({ defaults: { quantity: 1 },

// Declare how our relations should behave ——————————————————— relations: { materialAmounts: DL.Collection.MaterialAmount },

// Override parse to handle relations ———————————————————————— parse: function (response) { for (var key in this.relations) { if (this.relations.hasOwnProperty(key)) { response[key] = new this.relations[key](response[key], { parse: true }); } } return response; }});

Page 22: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

materialAmounts: DL.Collection.MaterialAmount },

// Override parse to handle relations ———————————————————————— parse: function (response) { for (var key in this.relations) { if (this.relations.hasOwnProperty(key)) { response[key] = new this.relations[key](response[key], { parse: true }); } } return response; }});

Page 23: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

...

<tbody>

<% _.each(customers, function(customer) { %>

<tr>

<td><%= customer.idNumber %></td>

<td><%= customer.name %></td>

<td><%= customer.city %></td>

</tr>

<% }); %>

</tbody>

...

Customers.html

Page 24: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

var dlServices = angular.module('dlServices', ['ngResource']);dlServices.factory('Order', [ '$resource', function ($resource) { return $resource('api/orders/:orderId', { orderId: '@id' }); }]);

Order

var dlApp = angular.module('dlApp', ['dlServices']);dlApp.controller('OrderListCtrl', [ '$scope', 'Order', function ($scope, Order) {

$scope.orders = Order.query();

$scope.save = function () { var order = $scope.orders[0]; order.quantity = 2; order.$save(); };

Page 25: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

}]);

var dlApp = angular.module('dlApp', ['dlServices']);dlApp.controller('OrderListCtrl', [ '$scope', 'Order', function ($scope, Order) {

$scope.orders = Order.query();

$scope.save = function () { var order = $scope.orders[0]; order.quantity = 2; order.$save(); }; }]);

Page 26: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

{

"status": "Created",

"quantity": 1,

"productionTime": "2014-01-10T09:00:00",

"customer": {

"id": 1,

"name": "Kalle Svensson"

},

"recipe": ...,

"materialAmounts": [

{

"amount": 40,

"material": ...

},

...

Order data

Page 27: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

<tbody>

<tr ng-repeat="order in orders">

<td>{{ order.customer.name }}</td>

<td>{{ order.quantity }}</td>

<td>{{ order.recipe.name }}</td>

<td>

<ul>

<li ng-repeat="amount in order.materialAmounts">

{{ amount.material.name }}

</li>

</ul>

</td>

</tr>

</tbody>

Orders.html

See Marius Gundersen at JSConf EU for performance considerations

Page 28: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

<tbody>

<tr ng-repeat="order in orders">

<td>{{ order.customer.name }}</td>

<td>{{ order.quantity }}</td>

<td>{{ order.recipe.name }}</td>

<td>

<ul>

<li ng-repeat="amount in order.materialAmounts">

{{ amount.material.name }}

</li>

</ul>

</td>

</tr>

</tbody>

Orders.html

See Marius Gundersen at JSConf EU for performance considerations

Page 29: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

// Declare the order model —————————————————————————————————————DL.Order = DS.Model.extend({ status: DS.attr(), quantity: DS.attr('number'), productionTime: DS.attr('date'),

customer: DS.belongsTo('customer'), recipe: DS.belongsTo('recipe'),

materialAmounts: DS.hasMany('orderMaterialAmount')});

Order

// Declare the order material amount model —————————————————————DL.OrderMaterialAmount = DS.Model.extend({ amount: DS.attr('number'),

material: DS.belongsTo('material')});

Page 30: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

materialAmounts: DS.hasMany('orderMaterialAmount')});

// Declare the order material amount model —————————————————————DL.OrderMaterialAmount = DS.Model.extend({ amount: DS.attr('number'),

material: DS.belongsTo('material')});

// Get a collection of orders from the server —————————————————var orders = this.store.find('order');orders.then(function (orders) { console.log('Successfully fetched orders');});

// Update a model and save it ——————————————————————————————————var order = orders.firstObject();order.set('name', 'Kalle Svensson');order.save().then(function (order) { console.log('Successfully saved a order');});

Page 31: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

material: DS.belongsTo('material')});

// Get a collection of orders from the server —————————————————var orders = this.store.find('order');orders.then(function (orders) { console.log('Successfully fetched orders');});

// Update a model and save it ——————————————————————————————————var order = orders.firstObject();order.set('name', 'Kalle Svensson');order.save().then(function (order) { console.log('Successfully saved a order');});

Page 32: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

console.log('Successfully fetched orders');});

// Update a model and save it ——————————————————————————————————var order = orders.firstObject();order.set('name', 'Kalle Svensson');order.save().then(function (order) { console.log('Successfully saved a order');});

Page 33: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

<tbody>

{{#each order in orders}}

<tr>

<td>{{ order.customer.name }}</td>

<td>{{ order.quantity }}</td>

<td>{{ order.recipe.name }}</td>

<td>

<ul>

{{#each amount in order.materialAmounts}}

<li>{{ amount.material.name }}</li>

{{/each}}

</ul>

</td>

</tr>

{{/each}}

</tbody>

Order

Page 34: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Knockout

Page 35: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

KnockoutQuick facts

First release 2010, julyDevelopers Steve Sandersson

Version 3.0.0Size 46 KB

⋆ Stars 4 585" Forks 755

Page 36: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

KnockoutQuick facts

First release 2010, julyDevelopers Steve Sandersson

Version 3.0.0Size 46 KB

⋆ Stars 4 585" Forks 755

Model

View

ViewModel

Page 37: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

...<tbody data-bind="foreach: customers"> <tr> <td data-bind="text: idNumber"></td> <td data-bind="text: name"></td> <td data-bind="text: city"></td> </tr></tbody>...

Orders.html

var model = new DL.Model.Order({ ... });

// Create a view model from our model ——————————————————————————var view_model = Knockback.viewModel(model);

// Apply the bindings to the view ——————————————————————————————

Knockback

Page 38: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

...

var model = new DL.Model.Order({ ... });

// Create a view model from our model ——————————————————————————var view_model = Knockback.viewModel(model);

// Apply the bindings to the view ——————————————————————————————Knockout.applyBindings(view_model, $('#our-view')[0]);

Knockback

Page 39: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Technical Dept

Page 40: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Technical Dept

Custom solutions

Page 41: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Technical Dept

Custom solutions

Dependencies

Page 42: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Technical DeptImpossible to maintain

Page 43: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Access server dataEmber Backbone Angular

11 2 3

Page 44: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

1 Access server dataEmber Backbone Angular1 2 3

Handle relational dataEmber Angular Backbone

21 2 3

Page 45: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

1 Access server dataEmber Backbone Angular1 2 3

2 Handle relational dataEmber Angular Backbone1 2 3

Bind data to the DOMAngular Ember Backbone

31 2 3

Page 46: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

AngularJS

Page 47: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

AngularJSQuick facts

First release 2009Developers Google Inc. &

community

Version 1.2.10Size 100 + 33 KB

⋆ Stars 19 758" Forks 5 839

Page 48: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

AngularJSQuick facts

First release 2009Developers Google Inc. &

community

Version 1.2.10Size 100 + 33 KB

⋆ Stars 19 758" Forks 5 839

Model

View

Controller

Services

Directives

Page 49: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

AngularJSQuick facts

First release 2009Developers Google Inc. &

community

Version 1.2.10Size 100 + 33 KB

⋆ Stars 19 758" Forks 5 839

Model

View

Controller

Services

Directives

Page 50: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Ember.js

Page 51: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Ember.jsQuick facts

First release 2011Developers Yehuda Katz,

Tom Dale &contributors

Version 1.3.1Size 263 + 77 KB

⋆ Stars 9 256" Forks 1 962

Page 52: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Ember.jsQuick facts

First release 2011Developers Yehuda Katz,

Tom Dale &contributors

Version 1.3.1Size 263 + 77 KB

⋆ Stars 9 256" Forks 1 962

Model

View

Controller

Router

Components

Page 53: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Ember.jsQuick facts

First release 2011Developers Yehuda Katz,

Tom Dale &contributors

Version 1.3.1Size 263 + 77 KB

⋆ Stars 9 256" Forks 1 962

Model

View

Controller

Router

Components

Page 54: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

! " # http://127.0.0.1:3000/demo/demo-web/#/orders/create

Live demo showing routing

Page 55: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

// Create a router for the application —————————————————————————

DL.Routers.ApplicationRouter = Backbone.Router.extend({

routes : {

'customers': 'listCustomers',

'customers/:customerId': 'editCustomer',

'customers/create': 'createCustomer'

},

Routing

// Show a list of customer ———————————————————————————————————

listCustomers: function () {

var customers = new DL.Collection.Customer();

customers.fetch({

success : function(collection) {

new DL.Views.CustomerListView({

collection : collection

});

}

});

Page 56: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

'customers/create': 'createCustomer'

},

// Show a list of customer ———————————————————————————————————

listCustomers: function () {

var customers = new DL.Collection.Customer();

customers.fetch({

success : function(collection) {

new DL.Views.CustomerListView({

collection : collection

});

}

});

},

// Show the edit form ————————————————————————————————————————

editCustomer: function (customerId) {

var customer = new DL.Model.Customer({id : customerId});

customer.fetch({

success : function(model) {

new DL.Views.CustomerEditView({

model : model

});

}

});

Page 57: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

});

},

// Show the edit form ————————————————————————————————————————

editCustomer: function (customerId) {

var customer = new DL.Model.Customer({id : customerId});

customer.fetch({

success : function(model) {

new DL.Views.CustomerEditView({

model : model

});

}

});

// Make sure that the list is also visible —————————————————

this.listCustomers();

}

});

Page 58: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

}

});

// Make sure that the list is also visible —————————————————

this.listCustomers();

}

});

Page 59: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

// Create a router for the application —————————————————————————

DL.Router.map(function () {

this.resource('customers', function () {

this.route('edit', { path: ':customer_id' });

this.route('create');

});

});

Routing

// Configure this edit customer route ——————————————————————————

DL.CustomersEditRoute = Ember.Route.extend({

model: function (params) {

return this.store.find('customer', params.customer_id);

}

});

// Configure the list customers route ——————————————————————————

DL.CustomersRoute = Ember.Route.extend({

Page 60: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

});

});

// Configure this edit customer route ——————————————————————————

DL.CustomersEditRoute = Ember.Route.extend({

model: function (params) {

return this.store.find('customer', params.customer_id);

}

});

// Configure the list customers route ——————————————————————————

DL.CustomersRoute = Ember.Route.extend({

model: function () {

return this.store.find('customer');

}

});

Page 61: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

}

});

// Configure the list customers route ——————————————————————————

DL.CustomersRoute = Ember.Route.extend({

model: function () {

return this.store.find('customer');

}

});

Page 62: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

angular.module('dlApp').config([ '$routeProvider',

function($routeProvider) {

$routeProvider.when('/customers', {

templateUrl : '/views/customers/index.html',

controller : 'CustomersCtrl'

}).when('/customers/:customerId', {

templateUrl : '/views/customers/edit.html',

controller : 'CustomerEditCtrl'

}).otherwise({

redirectTo : '/customers'

});

}

]);

Routing

For nested routes in Angular, try AngularUI Router

Page 63: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

angular.module('dlApp').config([ '$routeProvider',

function($routeProvider) {

$routeProvider.when('/customers', {

templateUrl : '/views/customers/index.html',

controller : 'CustomersCtrl'

}).when('/customers/:customerId', {

templateUrl : '/views/customers/edit.html',

controller : 'CustomerEditCtrl'

}).otherwise({

redirectTo : '/customers'

});

}

]);

Routing

For nested routes in Angular, try AngularUI Router

Page 64: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Handle advanced routingEmber Angular Backbone

41 2 3

Page 65: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

4 Handle advanced routingEmber Angular Backbone1 2 3

Animate transitionsAngular Ember, Backbone

51 2

Page 66: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Perform simple validationAngular Backbone Ember

61 2 3

Page 67: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

6 Perform simple validationAngular Backbone Ember1 2 3

Perform advanced validationAngular Ember Backbone

71 2 3

Page 68: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

6 Perform simple validationAngular Backbone Ember1 2 3

7 Perform advanced validationAngular Ember Backbone1 2 3

Handle “static” areasAngular, Ember Backbone

81 2

Page 69: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

6 Perform simple validationAngular Backbone Ember1 2 3

7 Perform advanced validationAngular Ember Backbone1 2 3

8 Handle “static” areasAngular, Ember Backbone1 2

React to WebSocket updatesBackbone Ember Angular

91 2 3

Page 70: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Winner?

Page 71: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Angular

Page 72: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

Angular. . .for now.

Page 73: Angular Ember Backbone - Jfokus · 2019-09-11 · Angular Ember Backbone 3 1 2 3. AngularJS. AngularJS Quick facts First release 2009 Developers Google Inc. & community Version 1.2.10

AngularvsEmbervsBackbone(and Knockout) in real applications

Joakim Kemeny@joakimkemeny