SlideShare ist ein Scribd-Unternehmen logo
1 von 65
DHTML
„Die Begriffe DHTML, dynamisches HTML (engl. dynamic HTML)
oder auch DOM-Scripting bezeichnen bestimmte Webdesign-
Methoden, bei denen während der Anzeige einer Webseite diese
selbst, ausgelöst durch Benutzereingaben, verändert wird.“




                                              Quelle: http://de.wikipedia.org/wiki/Dynamic_HTML
(Mobile Development mit)

Sencha Touch 2
Who's talking?


   Thorsten Suckow-Homberg, Jahrgang 1986 1976
       PHP & Javascript seit 1999
       Sencha-Frameworks seit 2007
       Autor diverser ExtJS-Extensions (u.a. Ext.ux.Livegrid) sowie
       des conjoon Open Source Projektes (conjoon.org)
       arbeitet für die eyeworkers interactive GmbH, Karlsruhe
       ( jobs.eyeworkers.de :) )


                 Hobbys: Kaffee, Gitarre, Fahrrad, Einhörner
Worum geht es hier?


   Sencha Touch 2 – HTML 5 Framework zur Erstellung
   „mobiler“ Applikationen
   Geschichtlicher Überblick und Einblicke in
       das Framework
       Sencha als Unternehmen
   Vorstellung verfügbarer Komponenten
   Klassensystem
   Aufbau einer ST Applikation
       Beispielprogramm
Sencha
– das is doch'n Tee, oder?
Sencha


   Jack Slocum programmiert ExtJS auf Basis von YUI, um
   eine erweiterte Sammlung von UI Controls anzubieten
   Ende 2007: ExtJS2 – Meilenstein!
   Juni 2010: „[...] we combined forces with jQTouch and
   Raphaël to tackle this new challenge of creating
   awesome web applications on touch based devices [...]“
   heute: Investment Capital, vlt. das populärste JS
   Framework: > 5000 Kunden, > 300.000 aktive community
   member, > 100 Mitarbeiter
   mehr als 1.6 Millionen Entwickler
Features
Features


   IOS (4+), Blackberry (OS 6+, Table OS 1), Android
   (2.2+ als kleinster gemeinsamer Nenner, außerdem
   noch Kindle Fire OS 6.2.2)
   SDK Tools
       Generieren und bundlen von Applikationen
       Native Packaging für PlayStore oder App Store
   Charting „Mobile HTML5 Charts“ (in 2.1?)
   Sencha Architect – Visual Editor für ST/ExtJS
Features - Charts
Features – Sencha Architect




                              Quelle: http://www.sencha.com/products/architect/
Sencha Touch – Das Ziel
Komponenten
Komponenten




              Quelle: Sencha Touch in Action, Manning Publications, http://www.manning.com/garcia2/. Mit freundlicher Genehmigung von Jay Garcia.
Komponenten - Component
Komponenten – Component


   Controls in Sencha Touch sind „Komponenten“ -
   Ext.Component
   Eigenschaften:
      show/hide
      enable/disable
      template based rendering
      floatable
      sizeable
      positionable
      observable!
Komponenten - Component
Komponenten - Container
Komponenten – Component > Container


   Container - lateinisch continere ‚zusammenhalten',
   ‚enthalten'
   Ext.Container - Basisklasse für alle Komponenten, die
   andere Komponenten aufnehmen können
      Toolbars
      Panels
      Fieldsets
   Container verwalten ihre Kindelemente über Layouts
Komponenten – Component > Container




                            Layouts?
Komponenten – Component > Container (Layouts)


   Wichtigsten:
       hbox
       vbox
       card
       fit
Komponenten – Component > Container (Layouts)


   Zum Beispiel:




                                                Quelle: http://www.sencha.com/docs/
Komponenten – Component > Container (Layouts)


   Aufgepaßt!
       Das „Wischen“ durch verschiedene Karten wird nicht
       direkt über ein Layout realisiert, sondern mit Hilfe von
       Ext.carousel.Carousel
Komponenten – Component > Container > Panel
Komponenten – Component > Container > Panel


   in ExtJS noch Container für verschiedene funktionelle
   Aufgaben, bspw. TabPanel, TreePanel, GridPanel
   in Sencha Touch: Overlays (Ext.Sheet)
   durch den Paradigmenwechsel „stationär“ →
   „mobil“ sind die verwendeten Panel-Typen recht
   überschaubar (Ext.TabPanel, Ext.Container mit
   entsprechenden Layouts)
Komponenten – Component > Container > Panel
Komponenten – Component > Container > TabPanel




                                                 (traditionell)
Komponenten – Component > Container > Toolbar
Komponenten – Component > Container > Toolbar


   Container zur Aufnahme von Steuer- oder
   Eingabeelementen
   Toolbars werden meist „docked“ eingehangen
       top
       bottom




   … und in Zusammenhang mit Navigation benutzt
       Container → Buttons (default Type ist Ext.Button)
Komponenten – Component > Button
Komponenten – Component > Button


   Ext.Button Repräsentiert einen „Button“
   kann mit icons versehen werden (text,
   icon/iconCls)
   feuert entsprechende Events bei Interaktion
Komponenten – Component > Button (Generiertes HTML Markup)




                                  ExtJS 3   ==
Komponenten – Component > Button (Generiertes HTML Markup)




                                  ExtJS 3   ==

                                    Sencha Touch




                                    !
Komponenten – Component > Button (Template)
template: [{
  tag       : 'span',
                                1
  reference : 'badgeElement',
  hidden    : true
}, {
  tag       : 'span',   2
  className : Ext.baseCSSPrefix +
              'button-icon',
  reference : 'iconElement',
  hidden    : true
}, {
  tag       : 'span',       3
  reference : 'textElement',
  hidden    : true
}]                                  1
                                                   2
                                    3
Komponenten – Component > Container > DataView > List
Komponenten – Component > Container > DataView > List


   Ext.dataview.DataView – View für data stores
   Ext.dataview.List – konkrete Implementierung
   (ähnlich „Grids“ in ExtJS)
       Gruppierung (grouped)
       Sortierung
       Index Leiste (indexBar → Ext.IndexBar)
       „Disclosures“
Komponenten – Component > Container > DataView > List
Komponenten – Model


   Repräsentiert Datenstruktur einzelner Entitäten
   Verfügt über Assoziationen
   Über Proxies können Änderungen an einzelnen
   Instanzen persistiert werden
Komponenten - Store


   Kapselt eine Kollektion von Model Instanzen
   Kommuniziert über Proxies mit angeschlossenen
   physikalischen Speichern (Backend, Client/HTML5
   Storage)
       filtern
       sortieren
       suchen
Unnu?
Klassensystem
Klassensystem - Einführung


   ST arbeitet mit einem eigenen System, um OOP in JS
   abzubilden
   Verwendet unter der Haube natürlich weiterhin die
   Stärken des Prototyping
       Overrides, Mixins
   new fällt weg, dafür Ext.create()
   Klassendefinition über Ext.define()
Klassensystem - Einführung             var User = function() {
                                       };
                   User                User.prototype = {
getFirstname(): String                      firstname : 'Max',
setFirstname(String)                        lastname   : 'Mustermann',
getLastname(): String
setLastname(String)                         setFirstname : function(fname) {
                                                 this.firstname = fname
                                            },
                                            getFirstname : function() {
                                                 return this.firstname;

Ext.define('User', {                        },

      config : {                            setLastname : function(lname) {

          firstname : 'Max',                     this.lastname = lname

          lastname    : 'Mustermann'        },

      }                                     getLastname : function() {

});                                              return this.lastname;
                                            },
                                       };
Klassensystem - Einführung             var User = function() {
                   User                };
getFirstname(): String                 User.prototype = {
setFirstname(String)                        firstname : 'Max',
getLastname(): String                       lastname   : 'Mustermann',
setLastname(String)
                                            setFirstname : function(fname) {

Ext.define('User', {                             this.firstname = fname

      config : {                            },

          firstname : 'Max',                getFirstname : function() {

          lastname    : 'Mustermann'             return this.firstname;

      }                                     },

});                                         setLastname : function(lname) {
                                                 this.lastname = lname
                                            },
getFirstname()
                                            getLastname : function() {
setFirstname()
                                                 return this.lastname;
getLastname()
                                            },
setLastname()
                                       };
Klassensystem - Einführung               var User = function() {
                   User                  };
getFirstname(): String                   User.prototype = {
setFirstname(String)                          firstname : 'Max',
getLastname(): String                         lastname   : 'Mustermann',
setLastname(String)
                                              setFirstname : function(fname) {

Ext.define('User', {                               this.firstname = fname

      config : {                              },

          firstname : 'Max',                  getFirstname : function() {

          lastname    : 'Mustermann'               return this.firstname;

      }                                       },

});                                           setLastname : function(lname) {
                                                   this.lastname = lname
                                              },
getFirstname()
                             apply*()         getLastname : function() {
setFirstname()
                             update*()             return this.lastname;
getLastname()
                                              },
setLastname()
                                         };
Klassensystem - Einführung




var user = Ext.create('User');   var user = new User();
Klassensystem - Einführung




var user = Ext.create('User');                          var user = new User();




                       var user = new User('Mustermann', 'Max');




                      var user = Ext.create('User', {
                            firstname : 'Max',
                            lastname   : 'Mustermann'
                      });
Klassensystem - Vererbung



   Ext.define('User.Customer', {
         extend : 'User',
                                     User
         config : {
             street   : '',
             city     : '',
             zipCode : ''
         }
   });
                                   Customer
Klassensystem - Mixins


    Mixins erlauben es, Funktionalität anderer Klassen in
    eine andere zu „streuen“
    „Traits“ in PHP
    Nur Verhalten wird kopiert, nicht aber der Typ!
    Beispiel: Ext.util.Observable
       In ExtJS noch eigenständige Klasse
    Klassen, deren Instanzen Ereignisse senden können
    („Events feuern“), übernehmen das Verhalten von
    Observable durch ein Mixin!
Klassensystem - Mixins

 Ext.define('User.Customer', {
       extend : 'User',
       mixins : [
            'Ext.util.Observable'
       ],                                       var cust = Ext.create('User.Customer');
       config : {
            street    : '',                     cust.on('addresschange', function() {
            city      : '',                           alert(„Address changed!“);
            ZipCode : ''                        });
       },

                                                cust.changeAddress(/*...*/);
       changeAddress : function(address) {
             // ...
             this.fireEvent('addresschange');
       }
 });
Aufbau einer
Applikation
Applikation - Grundgerüst




                                         *.css


                            index.html
       Server


                                         *.js
Applikation – Bootstrapping


    Bootstrapping über Ext.application
    Einstiegspunkt ist launch() - ähnlich Ext.onReady
       Wird aufgerufen, sobald Applikation initialisiert wurde
    Resourcen und Viewport werden hier initialisiert
    Folgt dem MVC Architekturmuster
Applikation - Verzeichnislayout


    Typisches Verzeichnislayout:
Applikation - Verzeichnislayout


    Typisches Verzeichnislayout:



                                   Namespace: webcon
Applikation - Verzeichnislayout


    Typisches Verzeichnislayout:



                                   Namespace: webcon

                                           webcon.controller.*
                                           webcon.model.*
                                           webcon.store.*
                                           webcon.view.*
Applikation - Packages

        /controller                     /model                   /view               /store


  Ext.app.Controller              Ext.data.Model           Ext.Component       Ext.data.Store



vermittelt zwischen Model-   repräsentiert (relationale)   UI Controls     Repräsentiert einen
und View-Instanzen           Datenstrukturen                               Datencontainer und verwaltet
                                                                           n-Instanzen vom Typ
                                                                           Ext.data.Model
Applikation - Komponenten


   Hauptansicht → webcon.view.MainView (Ext.tab.Panel)
      Hauptscreen → Ext.navigation.View
         Listenansicht → webcon.view.ListView (Ext.List)
              Datenbank → webcon.store.AttendeeStore
              (Ext.data.Store)
                  Datenstruktur → webcon.model.Attendee
                  (Ext.data.Model)
          Detailansicht → webcon.view.AttendeeDetailView
          (Ext.Container)
       Infoscreen → Ext.Container
Applikation – Das Ergebnis
Quellen

   Folien und Quelltext:
   http://thorsten.suckow-homberg.de/webcon-2012
   Dokumentation:
   http://sencha.com/docs
   Twitter:
   http://twitter.com/ModusCreate, /ModusJesus, /msims84, /sencha
   ExtJS in Action Books:
       http://manning.com/garcia
       http://manning.com/garcia2
       http://manning.com/garcia3
   Forum: http://sencha.com/forum

Weitere ähnliche Inhalte

Ähnlich wie Webcon 2012 Mobile Development mit Sencha Touch

Mehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch SkriptsprachenMehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch Skriptsprachenjlink
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtSebastian Springer
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbaseStefan Frömken
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
 
Mehr Dynamik Mit Groovy
Mehr Dynamik Mit GroovyMehr Dynamik Mit Groovy
Mehr Dynamik Mit Groovyjlink
 
SOLID Prinzipien, Designgrundlagen objektorientierter Systeme
SOLID Prinzipien, Designgrundlagen objektorientierter SystemeSOLID Prinzipien, Designgrundlagen objektorientierter Systeme
SOLID Prinzipien, Designgrundlagen objektorientierter SystemeMario Rodler
 
TYPO3 CMS 7.3 - Die Neuerungen - pluswerk
TYPO3 CMS 7.3 - Die Neuerungen - pluswerkTYPO3 CMS 7.3 - Die Neuerungen - pluswerk
TYPO3 CMS 7.3 - Die Neuerungen - pluswerkdie.agilen GmbH
 
Prototype 1.7
Prototype 1.7Prototype 1.7
Prototype 1.7msebel
 
PostgreSQL: Eigene Aggregate schreiben
PostgreSQL: Eigene Aggregate schreibenPostgreSQL: Eigene Aggregate schreiben
PostgreSQL: Eigene Aggregate schreibenHans-Jürgen Schönig
 
Einführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungEinführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungDigicomp Academy AG
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureDr. Christian Betz
 
Java Batch: Der neue Standard für‘s Stapeln
Java Batch: Der neue Standard für‘s StapelnJava Batch: Der neue Standard für‘s Stapeln
Java Batch: Der neue Standard für‘s Stapelngedoplan
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJSSebastian Springer
 
Interprozesskommunikation mit PHP
Interprozesskommunikation mit PHPInterprozesskommunikation mit PHP
Interprozesskommunikation mit PHPStephan Schmidt
 
Scalaz introduction for Java programmers
Scalaz introduction for Java programmersScalaz introduction for Java programmers
Scalaz introduction for Java programmersBernhard Huemer
 

Ähnlich wie Webcon 2012 Mobile Development mit Sencha Touch (20)

Mehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch SkriptsprachenMehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch Skriptsprachen
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser macht
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit Extbase
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
Einführung in Puppet
Einführung in PuppetEinführung in Puppet
Einführung in Puppet
 
Mehr Dynamik Mit Groovy
Mehr Dynamik Mit GroovyMehr Dynamik Mit Groovy
Mehr Dynamik Mit Groovy
 
SOLID Prinzipien, Designgrundlagen objektorientierter Systeme
SOLID Prinzipien, Designgrundlagen objektorientierter SystemeSOLID Prinzipien, Designgrundlagen objektorientierter Systeme
SOLID Prinzipien, Designgrundlagen objektorientierter Systeme
 
TYPO3 CMS 7.3 - Die Neuerungen - pluswerk
TYPO3 CMS 7.3 - Die Neuerungen - pluswerkTYPO3 CMS 7.3 - Die Neuerungen - pluswerk
TYPO3 CMS 7.3 - Die Neuerungen - pluswerk
 
Prototype 1.7
Prototype 1.7Prototype 1.7
Prototype 1.7
 
PostgreSQL: Eigene Aggregate schreiben
PostgreSQL: Eigene Aggregate schreibenPostgreSQL: Eigene Aggregate schreiben
PostgreSQL: Eigene Aggregate schreiben
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Einführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungEinführung in die funktionale Programmierung
Einführung in die funktionale Programmierung
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit Clojure
 
Java Batch: Der neue Standard für‘s Stapeln
Java Batch: Der neue Standard für‘s StapelnJava Batch: Der neue Standard für‘s Stapeln
Java Batch: Der neue Standard für‘s Stapeln
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJS
 
OOP - Scala
OOP - ScalaOOP - Scala
OOP - Scala
 
Interprozesskommunikation mit PHP
Interprozesskommunikation mit PHPInterprozesskommunikation mit PHP
Interprozesskommunikation mit PHP
 
WiSe 2014 | Softwaretechnologie I _ Funktionen, Zeiger, Strukturen, Bibliotheken
WiSe 2014 | Softwaretechnologie I _ Funktionen, Zeiger, Strukturen, BibliothekenWiSe 2014 | Softwaretechnologie I _ Funktionen, Zeiger, Strukturen, Bibliotheken
WiSe 2014 | Softwaretechnologie I _ Funktionen, Zeiger, Strukturen, Bibliotheken
 
Scalaz introduction for Java programmers
Scalaz introduction for Java programmersScalaz introduction for Java programmers
Scalaz introduction for Java programmers
 

Webcon 2012 Mobile Development mit Sencha Touch

  • 1. DHTML „Die Begriffe DHTML, dynamisches HTML (engl. dynamic HTML) oder auch DOM-Scripting bezeichnen bestimmte Webdesign- Methoden, bei denen während der Anzeige einer Webseite diese selbst, ausgelöst durch Benutzereingaben, verändert wird.“ Quelle: http://de.wikipedia.org/wiki/Dynamic_HTML
  • 3. Who's talking? Thorsten Suckow-Homberg, Jahrgang 1986 1976 PHP & Javascript seit 1999 Sencha-Frameworks seit 2007 Autor diverser ExtJS-Extensions (u.a. Ext.ux.Livegrid) sowie des conjoon Open Source Projektes (conjoon.org) arbeitet für die eyeworkers interactive GmbH, Karlsruhe ( jobs.eyeworkers.de :) ) Hobbys: Kaffee, Gitarre, Fahrrad, Einhörner
  • 4. Worum geht es hier? Sencha Touch 2 – HTML 5 Framework zur Erstellung „mobiler“ Applikationen Geschichtlicher Überblick und Einblicke in das Framework Sencha als Unternehmen Vorstellung verfügbarer Komponenten Klassensystem Aufbau einer ST Applikation Beispielprogramm
  • 5. Sencha – das is doch'n Tee, oder?
  • 6. Sencha Jack Slocum programmiert ExtJS auf Basis von YUI, um eine erweiterte Sammlung von UI Controls anzubieten Ende 2007: ExtJS2 – Meilenstein! Juni 2010: „[...] we combined forces with jQTouch and Raphaël to tackle this new challenge of creating awesome web applications on touch based devices [...]“ heute: Investment Capital, vlt. das populärste JS Framework: > 5000 Kunden, > 300.000 aktive community member, > 100 Mitarbeiter mehr als 1.6 Millionen Entwickler
  • 8. Features IOS (4+), Blackberry (OS 6+, Table OS 1), Android (2.2+ als kleinster gemeinsamer Nenner, außerdem noch Kindle Fire OS 6.2.2) SDK Tools Generieren und bundlen von Applikationen Native Packaging für PlayStore oder App Store Charting „Mobile HTML5 Charts“ (in 2.1?) Sencha Architect – Visual Editor für ST/ExtJS
  • 10. Features – Sencha Architect Quelle: http://www.sencha.com/products/architect/
  • 11. Sencha Touch – Das Ziel
  • 13. Komponenten Quelle: Sencha Touch in Action, Manning Publications, http://www.manning.com/garcia2/. Mit freundlicher Genehmigung von Jay Garcia.
  • 15. Komponenten – Component Controls in Sencha Touch sind „Komponenten“ - Ext.Component Eigenschaften: show/hide enable/disable template based rendering floatable sizeable positionable observable!
  • 18. Komponenten – Component > Container Container - lateinisch continere ‚zusammenhalten', ‚enthalten' Ext.Container - Basisklasse für alle Komponenten, die andere Komponenten aufnehmen können Toolbars Panels Fieldsets Container verwalten ihre Kindelemente über Layouts
  • 19. Komponenten – Component > Container Layouts?
  • 20. Komponenten – Component > Container (Layouts) Wichtigsten: hbox vbox card fit
  • 21. Komponenten – Component > Container (Layouts) Zum Beispiel: Quelle: http://www.sencha.com/docs/
  • 22. Komponenten – Component > Container (Layouts) Aufgepaßt! Das „Wischen“ durch verschiedene Karten wird nicht direkt über ein Layout realisiert, sondern mit Hilfe von Ext.carousel.Carousel
  • 23. Komponenten – Component > Container > Panel
  • 24. Komponenten – Component > Container > Panel in ExtJS noch Container für verschiedene funktionelle Aufgaben, bspw. TabPanel, TreePanel, GridPanel in Sencha Touch: Overlays (Ext.Sheet) durch den Paradigmenwechsel „stationär“ → „mobil“ sind die verwendeten Panel-Typen recht überschaubar (Ext.TabPanel, Ext.Container mit entsprechenden Layouts)
  • 25. Komponenten – Component > Container > Panel
  • 26. Komponenten – Component > Container > TabPanel (traditionell)
  • 27. Komponenten – Component > Container > Toolbar
  • 28. Komponenten – Component > Container > Toolbar Container zur Aufnahme von Steuer- oder Eingabeelementen Toolbars werden meist „docked“ eingehangen top bottom … und in Zusammenhang mit Navigation benutzt Container → Buttons (default Type ist Ext.Button)
  • 30. Komponenten – Component > Button Ext.Button Repräsentiert einen „Button“ kann mit icons versehen werden (text, icon/iconCls) feuert entsprechende Events bei Interaktion
  • 31. Komponenten – Component > Button (Generiertes HTML Markup) ExtJS 3 ==
  • 32. Komponenten – Component > Button (Generiertes HTML Markup) ExtJS 3 == Sencha Touch !
  • 33. Komponenten – Component > Button (Template) template: [{ tag : 'span', 1 reference : 'badgeElement', hidden : true }, { tag : 'span', 2 className : Ext.baseCSSPrefix + 'button-icon', reference : 'iconElement', hidden : true }, { tag : 'span', 3 reference : 'textElement', hidden : true }] 1 2 3
  • 34. Komponenten – Component > Container > DataView > List
  • 35. Komponenten – Component > Container > DataView > List Ext.dataview.DataView – View für data stores Ext.dataview.List – konkrete Implementierung (ähnlich „Grids“ in ExtJS) Gruppierung (grouped) Sortierung Index Leiste (indexBar → Ext.IndexBar) „Disclosures“
  • 36. Komponenten – Component > Container > DataView > List
  • 37. Komponenten – Model Repräsentiert Datenstruktur einzelner Entitäten Verfügt über Assoziationen Über Proxies können Änderungen an einzelnen Instanzen persistiert werden
  • 38. Komponenten - Store Kapselt eine Kollektion von Model Instanzen Kommuniziert über Proxies mit angeschlossenen physikalischen Speichern (Backend, Client/HTML5 Storage) filtern sortieren suchen
  • 39. Unnu?
  • 41. Klassensystem - Einführung ST arbeitet mit einem eigenen System, um OOP in JS abzubilden Verwendet unter der Haube natürlich weiterhin die Stärken des Prototyping Overrides, Mixins new fällt weg, dafür Ext.create() Klassendefinition über Ext.define()
  • 42. Klassensystem - Einführung var User = function() { }; User User.prototype = { getFirstname(): String firstname : 'Max', setFirstname(String) lastname : 'Mustermann', getLastname(): String setLastname(String) setFirstname : function(fname) { this.firstname = fname }, getFirstname : function() { return this.firstname; Ext.define('User', { }, config : { setLastname : function(lname) { firstname : 'Max', this.lastname = lname lastname : 'Mustermann' }, } getLastname : function() { }); return this.lastname; }, };
  • 43. Klassensystem - Einführung var User = function() { User }; getFirstname(): String User.prototype = { setFirstname(String) firstname : 'Max', getLastname(): String lastname : 'Mustermann', setLastname(String) setFirstname : function(fname) { Ext.define('User', { this.firstname = fname config : { }, firstname : 'Max', getFirstname : function() { lastname : 'Mustermann' return this.firstname; } }, }); setLastname : function(lname) { this.lastname = lname }, getFirstname() getLastname : function() { setFirstname() return this.lastname; getLastname() }, setLastname() };
  • 44. Klassensystem - Einführung var User = function() { User }; getFirstname(): String User.prototype = { setFirstname(String) firstname : 'Max', getLastname(): String lastname : 'Mustermann', setLastname(String) setFirstname : function(fname) { Ext.define('User', { this.firstname = fname config : { }, firstname : 'Max', getFirstname : function() { lastname : 'Mustermann' return this.firstname; } }, }); setLastname : function(lname) { this.lastname = lname }, getFirstname() apply*() getLastname : function() { setFirstname() update*() return this.lastname; getLastname() }, setLastname() };
  • 45. Klassensystem - Einführung var user = Ext.create('User'); var user = new User();
  • 46. Klassensystem - Einführung var user = Ext.create('User'); var user = new User(); var user = new User('Mustermann', 'Max'); var user = Ext.create('User', { firstname : 'Max', lastname : 'Mustermann' });
  • 47. Klassensystem - Vererbung Ext.define('User.Customer', { extend : 'User', User config : { street : '', city : '', zipCode : '' } }); Customer
  • 48. Klassensystem - Mixins Mixins erlauben es, Funktionalität anderer Klassen in eine andere zu „streuen“ „Traits“ in PHP Nur Verhalten wird kopiert, nicht aber der Typ! Beispiel: Ext.util.Observable In ExtJS noch eigenständige Klasse Klassen, deren Instanzen Ereignisse senden können („Events feuern“), übernehmen das Verhalten von Observable durch ein Mixin!
  • 49. Klassensystem - Mixins Ext.define('User.Customer', { extend : 'User', mixins : [ 'Ext.util.Observable' ], var cust = Ext.create('User.Customer'); config : { street : '', cust.on('addresschange', function() { city : '', alert(„Address changed!“); ZipCode : '' }); }, cust.changeAddress(/*...*/); changeAddress : function(address) { // ... this.fireEvent('addresschange'); } });
  • 51. Applikation - Grundgerüst *.css index.html Server *.js
  • 52. Applikation – Bootstrapping Bootstrapping über Ext.application Einstiegspunkt ist launch() - ähnlich Ext.onReady Wird aufgerufen, sobald Applikation initialisiert wurde Resourcen und Viewport werden hier initialisiert Folgt dem MVC Architekturmuster
  • 53. Applikation - Verzeichnislayout Typisches Verzeichnislayout:
  • 54. Applikation - Verzeichnislayout Typisches Verzeichnislayout: Namespace: webcon
  • 55. Applikation - Verzeichnislayout Typisches Verzeichnislayout: Namespace: webcon webcon.controller.* webcon.model.* webcon.store.* webcon.view.*
  • 56. Applikation - Packages /controller /model /view /store Ext.app.Controller Ext.data.Model Ext.Component Ext.data.Store vermittelt zwischen Model- repräsentiert (relationale) UI Controls Repräsentiert einen und View-Instanzen Datenstrukturen Datencontainer und verwaltet n-Instanzen vom Typ Ext.data.Model
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63. Applikation - Komponenten Hauptansicht → webcon.view.MainView (Ext.tab.Panel) Hauptscreen → Ext.navigation.View Listenansicht → webcon.view.ListView (Ext.List) Datenbank → webcon.store.AttendeeStore (Ext.data.Store) Datenstruktur → webcon.model.Attendee (Ext.data.Model) Detailansicht → webcon.view.AttendeeDetailView (Ext.Container) Infoscreen → Ext.Container
  • 65. Quellen Folien und Quelltext: http://thorsten.suckow-homberg.de/webcon-2012 Dokumentation: http://sencha.com/docs Twitter: http://twitter.com/ModusCreate, /ModusJesus, /msims84, /sencha ExtJS in Action Books: http://manning.com/garcia http://manning.com/garcia2 http://manning.com/garcia3 Forum: http://sencha.com/forum

Hinweis der Redaktion

  1. Paradigmenwechseln:Hinweis auf unterschiedliche Benutzerführung. Mehr wird durch weniger realisiert: Komplexer tree wird bspw. Mit einer Nested List dargestellt.