SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
Knockout js




“Simplify dynamic Javascript UIs by applying
         the Model View ViewModel Pattern”
Premessa




        Negli ultimi anni le applicazioni web
       sono diventate sempre più complesse
Con l’introduzione di AJAX le abbiamo
fatte andare sempre più veloci
Abbiamo cominciato a far lavorare

Knockout.js        di più il browser spostando la
                        logica dal server al client
E ci siamo trovati con vecchi
problemi che pensavamo di
aver risolto …
Knockout.js
Knockout è un’API JavaScript
che facilita la costruzione di
interfacce utente introducendo
il pattern MVVM lato client

        Model View ViewModel
MVC vs MVVM
Ci è stato detto più volte che il
modo migliore per sviluppare
una applicazione web è quello
di seguire il pattern MVC
MVC vs MVVM
MVVM si differenzia da MVC
perché introduce il concetto di
ViewModel, un oggetto che
gestisce le interazioni tra il
Model e gli elementi della View
MVC vs MVVM
MVVM non è alternativo a MVC, lo
completa, in quanto permette di
demandare al client le operazioni
che interessano soltanto la
modifica degli elementi della View
Knockout.js
In questo senso Knockout ci
permette di implementare
facilmente MVVM riducendo al
minimo il codice da scrivere
Knockout.js
Caratteristiche principali
Declarative binding
Associazione tra le proprietà del
ViewModel e gli elementi di una View
attraverso una sintassi dichiarativa
all’interno dell’attributo data-bind
1   Definiamo il ViewModel
    Realizziamo ad esempio un viewModel che permetta
    di visualizzare le caratteristiche di una playlist




                                      E’ un semplice oggetto
                                      JavaScript con proprietà
                                      e metodi
2   Associamo le proprietà del
    ViewModel agli elementi
    della View
       Attributo dell’elemento
       della View                Proprietà del
                                 ViewModel
3   Ordiniamo a knockout di
    applicare le associazioni



               Deve essere fatto dopo il
               caricamento del DOM
Automatic UI refresh
Grazie alla definizione di oggetti
“observable” knockout mantiene
sincronizzata l’interfaccia utente
con i valori del ViewModel
4   ko.observable( )




                Se modifico il valore tramite il campo input
                il titolo rifletterà la modifica
Dependency tracking
Ogni volta che un elemento della
View o un’altra proprietà del
ViewModel fanno riferimento ad
un observable knockout registra
una dipendenza che risolve
automaticamente secondo lo
schema publish-subscribe
5   ko.computed( )




                     Campo calcolato che dipende
                     dal valore di altre proprietà, ci
                     pensa knockout a gestirne
                     l’aggiornamento al modificare
                     di una delle sue dipendenze
Templating
Se il normale html non basta ed il
codice diventa ripetitivo possiamo
ricorrere ai template
6   template: { name: …


                   Nome del template
Knockout + MVC
In qualche modo le informazioni
devono passare da e per il server.
In ASP.NET MVC3 lo facciamo con
JSON, AJAX e il Model Binder
Credits
Le immagini contenute in questa presentazione hanno
licenza Creative Commons


Slide 1: http://www.flickr.com/photos/jnyemb/5200175187/in/photostream/
Slide 2: http://www.flickr.com/photos/theilr/345056969/in/photostream/
Slide 3: http://www.flickr.com/photos/damianmorysfotos/4388501292/in/photostream/
Slide 5: http://www.flickr.com/photos/su-lin/131551438/in/photostream/
Thank You   MANUEL SCAPOLAN
            website: www.manuelscapolan.it
            twitter: manuelscapolan
            e-mail: info@manuelscapolan.it

Weitere ähnliche Inhalte

Was ist angesagt?

Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Andrea Agnoletto
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsAndrea Dottor
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTfirenze-gtug
 
Customize ASP.NET Core scaffolding
Customize ASP.NET Core scaffoldingCustomize ASP.NET Core scaffolding
Customize ASP.NET Core scaffoldingAndrea Dottor
 
Training Signal Webtrends
Training Signal WebtrendsTraining Signal Webtrends
Training Signal WebtrendsStefano Iaboni
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuerySandro Marcon
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Andrea Dottor
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automationAntonio Liccardi
 
Architetttura Della Soluzione
Architetttura Della SoluzioneArchitetttura Della Soluzione
Architetttura Della SoluzioneLuca Milan
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
Applicazioni web con Asp.Net MVC 6
Applicazioni web con Asp.Net MVC 6Applicazioni web con Asp.Net MVC 6
Applicazioni web con Asp.Net MVC 6Michele Aponte
 
Dal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersDal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersAndrea Dottor
 
ASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesAndrea Dottor
 
Asp.NET MVC Framework
Asp.NET MVC FrameworkAsp.NET MVC Framework
Asp.NET MVC FrameworkDotNetMarche
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftStefano Benedetti
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGiacomoZorzin
 

Was ist angesagt? (20)

Asp.Net MVC 5
Asp.Net MVC 5Asp.Net MVC 5
Asp.Net MVC 5
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.js
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
 
Customize ASP.NET Core scaffolding
Customize ASP.NET Core scaffoldingCustomize ASP.NET Core scaffolding
Customize ASP.NET Core scaffolding
 
MVC and Struts 1
MVC and Struts 1MVC and Struts 1
MVC and Struts 1
 
Training Signal Webtrends
Training Signal WebtrendsTraining Signal Webtrends
Training Signal Webtrends
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuery
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automation
 
Architetttura Della Soluzione
Architetttura Della SoluzioneArchitetttura Della Soluzione
Architetttura Della Soluzione
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
Corso angular js base
Corso angular js baseCorso angular js base
Corso angular js base
 
Applicazioni web con Asp.Net MVC 6
Applicazioni web con Asp.Net MVC 6Applicazioni web con Asp.Net MVC 6
Applicazioni web con Asp.Net MVC 6
 
Dal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersDal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developers
 
ASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesASP.NET Core - Razor Pages
ASP.NET Core - Razor Pages
 
Asp.NET MVC Framework
Asp.NET MVC FrameworkAsp.NET MVC Framework
Asp.NET MVC Framework
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
 
ASP.NET MVC Intro
ASP.NET MVC IntroASP.NET MVC Intro
ASP.NET MVC Intro
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptx
 

Andere mochten auch

Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!Manuel Scapolan
 
TFS and Scrum - Lessons Learned
TFS and Scrum - Lessons LearnedTFS and Scrum - Lessons Learned
TFS and Scrum - Lessons LearnedManuel Scapolan
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateManuel Scapolan
 
Layered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSLayered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSAndrea Saltarello
 
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...Andrea Balducci
 
Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Manuel Scapolan
 
C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class LibraryManuel Scapolan
 
Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Manuel Scapolan
 
JavaScript Object Oriented
JavaScript Object OrientedJavaScript Object Oriented
JavaScript Object OrientedManuel Scapolan
 
Stai guardando i dati sbagliati
Stai guardando i dati sbagliatiStai guardando i dati sbagliati
Stai guardando i dati sbagliatiAlberto Brandolini
 
Costruire l'identità digitale con il piano editoriale
Costruire l'identità digitale con il piano editorialeCostruire l'identità digitale con il piano editoriale
Costruire l'identità digitale con il piano editorialeFederico Venturini
 
Inbox Zero: How to Become an Email Ninja
Inbox Zero: How to Become an Email NinjaInbox Zero: How to Become an Email Ninja
Inbox Zero: How to Become an Email NinjaMichael Reynolds
 
Object-oriented Programming-with C#
Object-oriented Programming-with C#Object-oriented Programming-with C#
Object-oriented Programming-with C#Doncho Minkov
 
Inbox Zero: Action-Based Email
Inbox Zero: Action-Based EmailInbox Zero: Action-Based Email
Inbox Zero: Action-Based Emailmerlinmann
 

Andere mochten auch (20)

Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!
 
TFS and Scrum - Lessons Learned
TFS and Scrum - Lessons LearnedTFS and Scrum - Lessons Learned
TFS and Scrum - Lessons Learned
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernate
 
Transactions redefined
Transactions redefinedTransactions redefined
Transactions redefined
 
Layered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSLayered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRS
 
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
 
Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)
 
C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class Library
 
Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Dai delegati a LINQ con C#
Dai delegati a LINQ con C#
 
JavaScript Object Oriented
JavaScript Object OrientedJavaScript Object Oriented
JavaScript Object Oriented
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Stai guardando i dati sbagliati
Stai guardando i dati sbagliatiStai guardando i dati sbagliati
Stai guardando i dati sbagliati
 
Costruire l'identità digitale con il piano editoriale
Costruire l'identità digitale con il piano editorialeCostruire l'identità digitale con il piano editoriale
Costruire l'identità digitale con il piano editoriale
 
Liberate il kraken
Liberate il krakenLiberate il kraken
Liberate il kraken
 
Optimized for what
Optimized for whatOptimized for what
Optimized for what
 
OOP with C#
OOP with C#OOP with C#
OOP with C#
 
HTML e CSS
HTML e CSSHTML e CSS
HTML e CSS
 
Inbox Zero: How to Become an Email Ninja
Inbox Zero: How to Become an Email NinjaInbox Zero: How to Become an Email Ninja
Inbox Zero: How to Become an Email Ninja
 
Object-oriented Programming-with C#
Object-oriented Programming-with C#Object-oriented Programming-with C#
Object-oriented Programming-with C#
 
Inbox Zero: Action-Based Email
Inbox Zero: Action-Based EmailInbox Zero: Action-Based Email
Inbox Zero: Action-Based Email
 

Ähnlich wie Knockout.js

Model-View-ViewModel con Windows Store Apps
Model-View-ViewModel con Windows Store AppsModel-View-ViewModel con Windows Store Apps
Model-View-ViewModel con Windows Store Appscodeblock
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the WebClaudio Gandelli
 
Asp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAsp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAndrea Balducci
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockoutDotNetCampus
 
MVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMarco Amendola
 
Spring Framework
Spring FrameworkSpring Framework
Spring FrameworkNaLUG
 
SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)Sabino Labarile
 
Webkit meets native development
Webkit meets native developmentWebkit meets native development
Webkit meets native developmentNicholas Valbusa
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 
What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012Andrea Dottor
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsGiorgio Di Nardo
 

Ähnlich wie Knockout.js (20)

Model-View-ViewModel con Windows Store Apps
Model-View-ViewModel con Windows Store AppsModel-View-ViewModel con Windows Store Apps
Model-View-ViewModel con Windows Store Apps
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
 
Asp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAsp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community Tour
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
 
ASP.NET
ASP.NETASP.NET
ASP.NET
 
Mvvm
MvvmMvvm
Mvvm
 
MVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.MicroMVVM senza fronzoli con Caliburn.Micro
MVVM senza fronzoli con Caliburn.Micro
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
AngularJS-Intro
AngularJS-IntroAngularJS-Intro
AngularJS-Intro
 
SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)
 
Webkit meets native development
Webkit meets native developmentWebkit meets native development
Webkit meets native development
 
ASP.NET MVC: Full Throttle
ASP.NET MVC: Full ThrottleASP.NET MVC: Full Throttle
ASP.NET MVC: Full Throttle
 
Usare Knockout JS
Usare Knockout JSUsare Knockout JS
Usare Knockout JS
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 
What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012
 
MVC2: non solo tecnologia
MVC2: non solo tecnologiaMVC2: non solo tecnologia
MVC2: non solo tecnologia
 
Corso angular js componenti
Corso angular js componentiCorso angular js componenti
Corso angular js componenti
 
Spring 2.5
Spring 2.5Spring 2.5
Spring 2.5
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
 

Knockout.js

  • 1. Knockout js “Simplify dynamic Javascript UIs by applying the Model View ViewModel Pattern”
  • 2. Premessa Negli ultimi anni le applicazioni web sono diventate sempre più complesse
  • 3. Con l’introduzione di AJAX le abbiamo fatte andare sempre più veloci
  • 4. Abbiamo cominciato a far lavorare Knockout.js di più il browser spostando la logica dal server al client
  • 5. E ci siamo trovati con vecchi problemi che pensavamo di aver risolto …
  • 6. Knockout.js Knockout è un’API JavaScript che facilita la costruzione di interfacce utente introducendo il pattern MVVM lato client Model View ViewModel
  • 7. MVC vs MVVM Ci è stato detto più volte che il modo migliore per sviluppare una applicazione web è quello di seguire il pattern MVC
  • 8. MVC vs MVVM MVVM si differenzia da MVC perché introduce il concetto di ViewModel, un oggetto che gestisce le interazioni tra il Model e gli elementi della View
  • 9. MVC vs MVVM MVVM non è alternativo a MVC, lo completa, in quanto permette di demandare al client le operazioni che interessano soltanto la modifica degli elementi della View
  • 10. Knockout.js In questo senso Knockout ci permette di implementare facilmente MVVM riducendo al minimo il codice da scrivere
  • 12. Declarative binding Associazione tra le proprietà del ViewModel e gli elementi di una View attraverso una sintassi dichiarativa all’interno dell’attributo data-bind
  • 13. 1 Definiamo il ViewModel Realizziamo ad esempio un viewModel che permetta di visualizzare le caratteristiche di una playlist E’ un semplice oggetto JavaScript con proprietà e metodi
  • 14. 2 Associamo le proprietà del ViewModel agli elementi della View Attributo dell’elemento della View Proprietà del ViewModel
  • 15. 3 Ordiniamo a knockout di applicare le associazioni Deve essere fatto dopo il caricamento del DOM
  • 16. Automatic UI refresh Grazie alla definizione di oggetti “observable” knockout mantiene sincronizzata l’interfaccia utente con i valori del ViewModel
  • 17. 4 ko.observable( ) Se modifico il valore tramite il campo input il titolo rifletterà la modifica
  • 18. Dependency tracking Ogni volta che un elemento della View o un’altra proprietà del ViewModel fanno riferimento ad un observable knockout registra una dipendenza che risolve automaticamente secondo lo schema publish-subscribe
  • 19. 5 ko.computed( ) Campo calcolato che dipende dal valore di altre proprietà, ci pensa knockout a gestirne l’aggiornamento al modificare di una delle sue dipendenze
  • 20. Templating Se il normale html non basta ed il codice diventa ripetitivo possiamo ricorrere ai template
  • 21. 6 template: { name: … Nome del template
  • 22. Knockout + MVC In qualche modo le informazioni devono passare da e per il server. In ASP.NET MVC3 lo facciamo con JSON, AJAX e il Model Binder
  • 23. Credits Le immagini contenute in questa presentazione hanno licenza Creative Commons Slide 1: http://www.flickr.com/photos/jnyemb/5200175187/in/photostream/ Slide 2: http://www.flickr.com/photos/theilr/345056969/in/photostream/ Slide 3: http://www.flickr.com/photos/damianmorysfotos/4388501292/in/photostream/ Slide 5: http://www.flickr.com/photos/su-lin/131551438/in/photostream/
  • 24. Thank You MANUEL SCAPOLAN website: www.manuelscapolan.it twitter: manuelscapolan e-mail: info@manuelscapolan.it