Budowa nowoczesnej aplikacji SPA z wykorzystaniem biblioteki Ember.js



Podobne dokumenty
Architektura MVC w ASP.NET. Autor wykładu: Marek Wojciechowski

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Podstawy wzorca MVC MODEL KON- TROLER WIDOK. Odpowiada za wyświetlenie danych użytkownikowi. Zawiera dane aplikacji oraz jej logikę.

MVC w praktyce tworzymy system artykułów. cz. 1

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Tworzenie aplikacji Web Alicja Zwiewka. Page 1

Szkolenie wycofane z oferty. Programowanie w JavaScript (zawiera jquery)

Zrąb JavascriptMVC. Krzysztof Płocharz. 6 kwiecień Uniwersytet Warszawski

ANGULARJS TWORZENIE APLIKACJI INTERNETOWYCH

ASP.NET MVC. Grzegorz Caban 20 stycznia 2009

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

prowadzący dr ADRIAN HORZYK /~horzyk Konsultacje paw. D-13/325D

I.Wojnicki, Tech.Inter.

WYKŁAD 1 ANGULARJS CZĘŚĆ 1

PROJEKTOWANIE APLIKACJI INTERNETOWYCH

Scenariusz Web Design DHTML na 10 sesji. - Strony statyczne I dynamiczne. - Dodawanie kodu VBScript do strony HTML. Rysunek nie jest potrzebny

I.Wojnicki, PHP. Smarty. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie. 28 marca 2014

Kurs języka Ruby. Ruby on Rails ActionPack

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

Technologie dla aplikacji klasy enterprise. Wprowadzenie. Marek Wojciechowski

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

Wybrane działy Informatyki Stosowanej

NoSQL Not Only SQL: CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Przetwarzanie dokumentów i widoków.

Tytuł szkolenia: Angular 4 - budowanie nowoczesnych i wydajnych aplikacji przeglądarkowych

Laboratorium nr 3 Podstawy Ruby on Rails

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

WICKET VS. DJANGO. Leszek Gawron vs. Michał Leszczyński

app/ - folder zawiera pliki konfiguracyjne dla całej aplikacji Można wybrać sposób zapisu konfiguracji: YML, XML, PHP

Walidacja danych w ASP.NET MVC

Rys.2.1. Drzewo modelu DOM [1]

Wybrane działy Informatyki Stosowanej

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Zaawansowane aplikacje internetowe - laboratorium

Dokument Detaliczny Projektu Temat: Księgarnia On-line Bukstor

Wzorce architektoniczne

Zaawansowane Aplikacje Internetowe

Wybrane działy Informatyki Stosowanej

Realizacja Aplikacji Internetowych 2013 laboratorium cz. 2 K.M. Ocetkiewicz

TABUN_CMS. System zarządzania treścią dla dedykowanej grupy użytkowników. Tabun_CMS 2008 Marcin Biegun, Szymon Bąk

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Kompresja stron internetowych

Gerard Frankowski, Zespół Bezpieczeństwa PCSS. Nowoczesne technologie bliżej nas Poznań,

Dokumentacja Skryptu Mapy ver.1.1

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Infrastruktura aplikacji WWW

Programowanie komponentowe 5

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

REACT NATIVE. Anna Maziejuk Kamil Jankowski

Zaawansowane aplikacje internetowe laboratorium REST

Wprowadzenie do framework a Symfony

Zaawansowane aplikacje internetowe

Funkcje i instrukcje języka JavaScript

NoSQL Not Only SQL, CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Igor Wojnicki

Ćwiczenia 2 IBM DB2 Data Studio

Instrukcja laboratoryjna cz.2

Studium Podyplomowe Aplikacje i Us ugi Internetowe Tworzenie witryn internetowych 2012/2013. CakePHP część II

Ext JS. Paweł Nowak

PHP zaawansowane programowanie

Projekt: Mikro zaprogramowane na sukces!

Aplikacje WWW - laboratorium

MVC w praktyce tworzymy system artykułów. cz. 2

Modele danych walidacja widoki zorientowane na model

TECHNOLOGIE SIECI WEB

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

PROJEKTOWANIE APLIKACJI INTERNETOWYCH

Framework Angular4. Alicja Frankowicz Weronika Węglińska

Ruby i Ruby on Rails. Mateusz Drożdżyński

Zaawansowany kurs języka Python

SAS Podstawowe informacje przed ćwiczeniem 1

Założenia projektowe dla zapytania ofertowego EAK_ZA_01/2015

ASP.NET MVC. Autor wykładu: Marek Wojciechowski

WYKŁAD 4 JĘZYK JAVASCRIPT CZĘŚĆ 1

Zdarzenia Zdarzenia onload i onunload

Aplikacje WWW - laboratorium

Specyfikacja reklamy tekstowej i bannerowej na portalu GoldenLine.pl

Kompleksowe tworzenie aplikacji klasy Desktop z wykorzystaniem SWT i

Program szkolenia: REST i Microservices w PHP

KARTA PRZEDMIOTU. Warsztaty z Ruby on Rails. Ruby on Rails Workshop

Programowanie dla ios

Projektowanie architektury systemu internetowego

Bezpieczeństwo frameworków WEBowych Java na przykładzie ataku CSRF

Zaawansowany kurs języka Python

Program szkolenia: JavaScript Craftsmanship

Walidacja po stronie serwera Walidacja po stronie klienta:

Program szkolenia: Wzorce projektowe i ich implementacja w C# oraz testowanie automatyczne

JavaScript - korzenie

Dostosowywanie wyglądu aplikacji czytelnika w oparciu o oprogramowanie dlibra 5.0

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

ANGULAR 2+ Waldemar Korłub. Aplikacje i Usługi Internetowe KASK ETI Politechnika Gdańska

Nowoczesne technologie bliżej nas 1

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Tworzenie zaawansowanych aplikacji w środowisku ios. Wykład 2 Objective-C. Tomasz Idzi

Programowanie zorientowane obiektowo. Mateusz Kołecki

Transkrypt:

Akademia MetaPack Uniwersytet Zielonogórski Budowa nowoczesnej aplikacji SPA z wykorzystaniem biblioteki Ember.js Daniel Habowski

Budowa aplikacji SPA z wykorzystaniem biblioteki Ember.js Agenda: 1. Standardowa aplikacja 2. Wprowadzenie do SPA 3. Porównanie 4. Wprowadzenie do Ember.js 5. Jak to wykorzystaliśmy w MetaPack 6. Pytania 2/23

Budowa standardowej aplikacji Aplikacja internetowa (wikipedia): program komputerowy, który pracuje na serwerze i komunikuje się poprzez sieć komputerową z hostem użytkownika komputera z wykorzystaniem przeglądarki internetowej 3/23

Wprowadzenie Typowy schemat komunikacji klasycznej aplikacji internetowej 4/23

ASP.Net MVC (Fiddler) DEMO 5/23

Budowa aplikacji SPA z wykorzystaniem biblioteki Ember.js Aplikacja SPA: Aplikacja webowa Składa się z pojedynczej strony web (HTML+JavaScript+CSS) Dane ładowane dynamicznie na żądanie Nie wymaga przeładowania strony Nie przekierowuje użytkownika na inne strony 6/23

Budowa aplikacji SPA z wykorzystaniem biblioteki Ember.js Schemat komunikacji aplikacji SPA 7/23

SPA (Fiddler) DEMO 8/23

Porównanie Klasyczna aplikacja Strona tworzona przy każdym odwołaniu do niej Kod UI nie oddzielony od logiki biznesowej Konieczność zachowania stanu formularzy między stronami Cache serwerów proxy i przeglądarki nieużywane Serwer angażowany dla każdej akcji użytkownika Konieczność użycia wielu języków np. C# i JavaScript Zaawansowane UI wymaga skomplikowanego JavaScript Tylko online SPA Strona ładowana tylko raz Kod UI całkowicie oddzielony od logiki biznesowej Stan aplikacji jest pamiętany, możliwe jest użycie HTML5 storage Całe UI może być przechowywane w cache Serwer angażowany tylko w celu wykonania logiki biznesowej Aplikacja może być stworzona w jednym języku programowania: JavaScript Dobry framework robi bardzo wiele za programistę Możliwość działania offline 9/23

Budowa aplikacji SPA z wykorzystaniem biblioteki Ember.js Dlaczego Ember.js Obiektowość Computed properties Observers Templates Components Architektura MVC Routing 10/23

Budowa aplikacji SPA z wykorzystaniem biblioteki Ember.js Obiektowość Em.Object() extend() init() create() reopen() App.Address = Em.Object.extend({ init: function () { this._super(); this.set('country', 'POL'); }, name: null, city: null var address = App.Address.create({name: "Kowalski" App.Address.reopen({ country: null 11/23

Computed properties DEMO 12/23

Budowa aplikacji SPA z wykorzystaniem biblioteki Ember.js Computed properties Chaining Dynamic updating Getters / setters Person = Ember.Object.extend({ firstname: null, lastname: null, age: null, fullname: function (key, value, previousvalue) { // setter if (arguments.length > 1) { var nameparts = value.split(/\s+/); this.set('firstname', nameparts[0]); this.set('lastname', nameparts[1]); } // getter return this.get('firstname') + ' ' + this.get('lastname'); }.property('firstname', 'lastname'), description: function () { return this.get('fullname')+'; Age: '+this.get('age')+';'; }.property('fullname', 'age') var captainamerica = Person.create({ age: 80 captainamerica.set('fullname', "William Burnside"); captainamerica.get('lastname'); // Burnside captainamerica.get('description'); // "William Burnside; Age: 80; Źródło: http://guides.emberjs.com 13/23

Budowa aplikacji SPA z wykorzystaniem biblioteki Ember.js Observers Person = Ember.Object.extend({ firstname: null, lastname: null, fullname: function() { return this.get('firstname'); + ' ' + this.get('lastname'); }.property('firstname', 'lastname'), fullnamechanged: function() { // deal with the change }.observes('fullname') var person = Person.create(); person.set('firstname', 'Brohuda'); // observer will fire person.addobserver('fullname', function() { // deal with the change Źródło: http://guides.emberjs.com 14/23

Aggregation DEMO 15/23

Budowa aplikacji SPA z wykorzystaniem biblioteki Ember.js Aggregation Monitorowanie listy Insert remove value change Tylko jeden poziom init: function () { this.set('sentconsignments',this.loadallconsignments()); }, totalweight: function () { var sum = 0; this.get('sentconsignments').foreach(function(consignment){ var weight = parsefloat(consignment.get('weight')); sum += weight; return sum; }.property('sentconsignments.@each.weight') Źródło: http://guides.emberjs.com 16/23

Views handlebars DEMO 17/23

Budowa aplikacji SPA z wykorzystaniem biblioteki Ember.js TEMPLATES Expressions Outlets Conditionals Lists Actions helpers <div class="toolbar">{{outlet "toolbar"}}</div> {{#if model}} {{{model.detailsashtml}}} {{else}} <div class="alert" role="alert"> <b>consignment not found</b> </div> {{/if}} {{#link-to 'createconsignment' classnames="btn btn-success"}} Create another consignment {{/link-to}} {{#each consignment in model.consignments}} {{render 'consignmentdetails' consignment}} {{else}} <b>no consignments found...</b> {{/each}} 18/23

Validation component DEMO 19/23

Budowa aplikacji SPA z wykorzystaniem biblioteki Ember.js Components <label>{{label}}</label> {{input class="form-control" type="text" value=value}} <span class="field-validation-valid"></span> App.InputValidatedComponent = Em.Component.extend({ didinsertelement: function () { var elid = (App.customId++).toString(); this.$('input').attr({ 'name': elid, 'data-val': true, 'data-val-required': "Required field" } {{input-validated label="name" value=model.name}} 20/23

Budowa aplikacji SPA z wykorzystaniem biblioteki Ember.js Model View - Controller <b>your consignment with id: {{model.id}} has been successful sent: </b> {{createdate}} App.ConsignmentController = Em.Controller.extend({ createdate: function () { return App.formatDateTime(this.get('model.date')); }.property('model.date') App.Consignment = Em.Object.extend({ date: Date.now() Źródło: http://guides.emberjs.com 21/23

Routing DEMO 22/23

Budowa aplikacji SPA z wykorzystaniem biblioteki Ember.js Routing URL = application state Wildcards Dynamic segments Nested routes Query parameters App.Router.map(function () { this.route('createconsignment', { path: '/consignments/new' this.resource('createdconsignmentdata', {path:'/consignments/:consignmentid' this.route('bad_url', { path: '/*badurl' App.CreatedConsignmentDataRoute = Em.Route.extend({ controllername: 'consignment', model: function (params, transition) { return this.controllerfor('application').getconsignment(params.consignmentid); } App.LoadingRoute = Em.Route.extend({ rendertemplate: function() { this.render("loading"); } Źródło: http://guides.emberjs.com 23/23

Web Shipping Client DEMO 24/23

Akademia MetaPack Uniwersytet Zielonogórski Warsztaty 22-04-2015 Szafrana 2, bud. A2, sala 409 Daniel Habowski