SlideShare una empresa de Scribd logo
1 de 109
Data Binding in qooxdoo
     Intelligente und umfassende Datenbindung für
            moderne Webanwendungen in qooxdoo




           Master Thesis - Martin Wittemann
                      martin.wittemann@1und1.de

  HS-Karlsruhe                1&1 Internet AG
                 16.04.2009
Introduction
Data Binding



  Model        View
Data Binding



  Model        View
Data Binding

           Formating


               Filtering
               Sorting
  Model                    View

           Validation
           Converting
Why?




   Faster     Advantage over
                               Bug 18 and 19
programming    competitors
JavaScript
• All objects are assoziative arrays
• Different ways to call a function:
         var doFunc = function() {
           // function code
         }
         var obj = {do: doFunc};

         obj.do();                     //   1.
         obj[quot;doquot;]();                  //   2.
         obj.do.call();                //   3.
         obj[quot;doquot;][quot;callquot;]();          //   4.
         doFunc.call(obj);             //   5.
         doFunc[quot;callquot;](obj);          //   6.
         obj[quot;doquot;].apply();            //   7.
         obj[quot;doquot;][quot;applyquot;]();         //   8.
Analysis
Evaluation
Evaluation
 JavaScript
Frameworks




 SproutCore




 SmartClient
Evaluation
                Alternative
 JavaScript
               Frameworks
Frameworks




 SproutCore        Flex




 SmartClient
Evaluation
                Alternative
 JavaScript                       Native
               Frameworks
Frameworks                     Frameworks




 SproutCore        Flex


                                       Cocoa




                                    Eclipse Data
                                      Binding
                              WPF
 SmartClient
Features
• Binding of single values
• Binding of list widgets
• Binding of tree widgets
• Binding of JSON, XML, CSV
• Formating, Conversion, Filtering, ...
• Master detail view
• ...
Use Cases
• Synchronize two textfields
• Fill a list with data from a JSON file
• Fill a tree widget with data
• Connect to the twitter REST service
  and display messages in a list
• ...
Architecture
Structure


            DataStore
              Store       Model   Controller   View
 Data




        Backend Binding           UI Binding
Layers




     Store    Model    Controller


             qooxdoo
Store 1
                                               Layers

                                  Store 2

                                     ...




             Abstract Store
                                  Store N


                              Data Array




qooxdoo
                     Classes with Properties


                                Controller 1

                                Controller 2
            Binding




                                     ...
          SingleValue




                                Controller N
Single Value
  Binding
How could it work?
• Change notification needed
• Common way to access the data needed
How could it work?
• Change notification needed
• Common way to access the data needed
qooxdoo Properties
• Support for change events
• Generated accessors
Idea
           a:A           b:A
       + prop : 12   + prop :
Idea
           a:A                         b:A
                     <<binding>>
       + prop : 12                 + prop :
Idea
           a:A                         b:A
                     <<binding>>
       + prop : 12                 + prop : 12
Idea
           a:A                         b:A
                     <<binding>>
       + prop : 23                 + prop : 23
Idea
           a:A                         b:A
                     <<binding>>
       + prop : 23                 + prop : 30
Idea
           a:A                         b:A
                     <<binding>>
       + prop : 23                 + prop : 30




           a.bind(quot;propquot;, b, quot;propquot;);
Deep Binding
         a:A           c:B
     + child : b   + prop :



         b:B
     + prop : 12
Deep Binding
         a:A                         c:B
                   <<binding>>
     + child : b                 + prop :



         b:B
     + prop : 12
Deep Binding
         a:A                         c:B
                   <<binding>>
     + child : b                 + prop : 12



         b:B
     + prop : 12
Deep Binding
         a:A                         c:B
                   <<binding>>
     + child : b                 + prop : 23



         b:B
     + prop : 23
Deep Binding
         a:A                         c:B
                   <<binding>>
     + child : b                 + prop : 23



         b:B
     + prop : 23
Deep Binding
         a:A                         c:B
                   <<binding>>
     + child : b                 + prop :
Deep Binding
         a:A                         c:B
                   <<binding>>
     + child : b
               d                 + prop : 78



         d:B
     + prop : 78
Deep Binding
         a:A                         c:B
                   <<binding>>
     + child : b
               d                 + prop : 78



         d:B
     + prop : 78




     a.bind(quot;child.propquot;, b, quot;propquot;);
Realization
• Properties and events as a basis
• Using of the dynamic aspects of JavaScript

 var value = targetObject[quot;getquot; + propertyName]();
Challenges
• highly dynamic
      a.bind(quot;c[1].d.e[0].namequot;, b, quot;propquot;);



• Fallback
     textfield.bind(quot;inputquot;, label, quot;contentquot;);
Controller
Controller
       DataStore
         Store     Model   Controller   View
Data
Controller
       DataStore
         Store     Model   Controller   View
Data
Views



  List        Tree       Table




SelectBox   ComboBox   Form Elements
Controller


   Object    List   Tree   Table
Controller


      Object   List   Tree
Selection
without data binding




       list.getSelected();
Selection
without data binding




       list.getSelected();




          ListItem
Selection
without data binding         with data binding



                               0
                                00




                             ctrl.getSelection()[0];
       list.getSelected();




          ListItem
Selection
without data binding         with data binding



                               0
                                00




                             ctrl.getSelection()[0];
       list.getSelected();




                                     ModelItem   4
          ListItem
Problems
• Default binding only to the label and the icon
 • Hard wired
Problems
• Default binding only to the label and the icon
 • Hard wired




    Extension with the Delegate Pattern
Delegate Pattern

                      var delegate =
                        new DelegateOfA();

                      this.do = function() {
       A                return delegate.do();
                      }
           delegate


     Delegate
Delegate Pattern in qooxdoo
                      this.setDel = function(del)
                      {
                        this.delegate = del;
                      }

                      this.do = function()
       A              {
                        if (
                          this.delegate != null
           delegate
                          && this.delegate.do != null
                        ){
     Delegate             this.delegate.do();
                        } else {
                          this.doDefault();
                        }
                      }
Binding of other properties
  var delegate = {

    bindItem : function(controller, item, id)
    {
      controller.bindProperty(
         quot;onlinequot;, quot;checkedquot;, null, item, id
      );
    }
  };

  controller.setDelegate(delegate);
Binding of other properties
  var delegate = {

    bindItem : function(controller, item, id)
    {
      controller.bindProperty(
         quot;onlinequot;, quot;checkedquot;, null, item, id
      );
    }
  };

  controller.setDelegate(delegate);


   „The delegate structure provides great extensibility. Well done!“
                                                               [Wayne Si]
Model
Model
       DataStore
         Store     Model   Controller   View
Data
Model
       DataStore
         Store     Model   Controller   View
Data
Requirements
• Regular qooxdoo classes hold the data
• Properties with events on every change
 • Can hold every JavaScript datatype
• Problem with data in native arrays
 • No change events will be fired
Requirements
• Regular qooxdoo classes hold the data
• Properties with events on every change
 • Can hold every JavaScript datatype
• Problem with data in native arrays
 • No change events will be fired


 Custom array implementation is necessary
Stores
Stores
       DataStore
         Store     Model   Controller   View
Data
Stores
       DataStore
         Store     Model   Controller   View
Data
Possible Data Sources
Possible Data Sources


   JSON     XML      CSV


   SOAP   JSON-RPC      ...
Possible Data Sources


   JSON     XML      CSV


   SOAP   JSON-RPC      ...
Architecture

                  var marshaler =
                    new JsonMarshaler();

                  this.do = function() {
      JsonStore     return marshaler.do();
                  }




        Json
      Marshaler
Responsibilities

                 Fetches and provides
     JsonStore
                 the data as model.

                 Generates the model
       Json
                 classes and instances.
     Marshaler
Creating Classes

  qx.Class.define(quot;namespace.namequot;,
  {
    extend : qx.core.Object,

   properties :
   {
      // ...
   }

  });
Creating Classes


  qx.Class.define(quot;namespace.namequot;,
  {
    extend : qx.core.Object,

   properties : p

  });
Creating Classes



  qx.Class.define(quot;namespace.namequot;, classDef);
What Distinguishes Models?
• Models hold all data in properties
What Distinguishes Models?
• Models hold all data in properties



    Only the property names are different
Identifying Model Classes

        Model
                Hash
   +b
   +a
Identifying Model Classes

        Model
                       ba
                Hash
   +b
   +a
Identifying Model Classes

        Model
                       ba
                Hash
   +b
   +a




        Model
                       ab
                Hash
   +a
   +b
Identifying Model Classes

        Model
                       ba

                            !
                Hash
   +b
   +a




        Model
                       ab
                Hash
   +a
   +b
Identifying Model Classes

        Model
                Hash
   +b
   +a
Identifying Model Classes

        Model
                       ab
                Hash
   +b
   +a
Identifying Model Classes

          Model
                         ab
                  Hash
   +b
   +a




          Model
                         ab
                  Hash
   + ab
Identifying Model Classes

          Model
                         ab

                              !
                  Hash
   +b
   +a




          Model
                         ab
                  Hash
   + ab
Identifying Model Classes

        Model
                Hash
   +b
   +a
Identifying Model Classes

        Model
                       a$b
                Hash
   +b
   +a
Identifying Model Classes

           Model
                          a$b
                   Hash
   +b
   +a




           Model
                          a$b
                   Hash
   + a$b
Identifying Model Classes

           Model
                          a$b

                                !
                   Hash
   +b
   +a




           Model
                          a$b
                   Hash
   + a$b
Identifying Model Classes

        Model
                Hash
   +b
   +a
Identifying Model Classes

        Model
                       aquot;b
                Hash
   +b
   +a
Identifying Model Classes

        Model
                       aquot;b
                Hash
   +b
   +a




                ✔
Extended Stores




 Gears
Integration
Integration
        DataStore
          Store     Model   Controller   View
Data
Integration
        DataStore
          Store     Model   Controller   View
Data
The Data

       [
           quot;aquot;, quot;bquot;, quot;cquot;, quot;dquot;,
           quot;equot;, quot;fquot;, quot;gquot;, quot;hquot;,
           quot;iquot;, quot;jquot;, quot;kquot;, quot;lquot;
       ]
                        data.json
Application Code


var list = new qx.ui.form.List();
this.getRoot().add(list);

var controller = new qx.data.controller.List(null, list);

var store = new qx.data.store.Json(quot;data.jsonquot;);

store.bind(quot;modelquot;, controller, quot;modelquot;);
Result
Structure

 Data
Structure

            List
 Data
Structure

                             target
            ListController            List
 Data

                   model
                   null
Structure

        url                                    target
              JsonStore       ListController            List
 Data

                      model          model
               null                  null
Structure

        url                                                  target
              JsonStore                     ListController            List
 Data

                      model                        model
                              <<binding>>
               null                                null
Structure

        url                                                  target
              JsonStore                     ListController            List
 Data

                      model                        model
                              <<binding>>
               null                                null
               Model
Structure

        url                                                  target
              JsonStore                     ListController            List
 Data
                             <<binding>>
                                           model
                     model
                              Model
Feed Reader
Feed Reader
  Data




               tion
            ec
         sel


                      selection
Feed Reader
     Data


                  selection
 TreeController               ListController




                                      selection
Conclusion
Layers

                            Twitter Store

                             Flickr Store




             JSON Store
                            Gears Store


                          Data Array

                   Classes with Properties

qooxdoo
                          Object Controller

                           List Controller
            Binding
          SingleValue




                           Tree Controller
Outlook
• Remote model
• Virtual widgets support
• Table support
• Optimization
• Dynamic form widget
Give it a try!
More Information
http://qooxdoo.org/documentation/0.8/data_binding
http://demo.qooxdoo.org/current/feedreader/


Images source
http://www.everystockphoto.com/
http://www.qooxdoo.org

Más contenido relacionado

La actualidad más candente

Building Rich Domain Models
Building Rich Domain ModelsBuilding Rich Domain Models
Building Rich Domain ModelsChris Richardson
 
OSDC.fr 2012 :: Cascalog : progammation logique pour Hadoop
OSDC.fr 2012 :: Cascalog : progammation logique pour HadoopOSDC.fr 2012 :: Cascalog : progammation logique pour Hadoop
OSDC.fr 2012 :: Cascalog : progammation logique pour HadoopPublicis Sapient Engineering
 
[系列活動] Data exploration with modern R
[系列活動] Data exploration with modern R[系列活動] Data exploration with modern R
[系列活動] Data exploration with modern R台灣資料科學年會
 
#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기Arawn Park
 
Building High Performance Web Applications and Sites
Building High Performance Web Applications and SitesBuilding High Performance Web Applications and Sites
Building High Performance Web Applications and Sitesgoodfriday
 
Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Oliver Gierke
 
Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)Geoffrey De Smet
 
Synthesizing API Usage Examples
Synthesizing API Usage Examples Synthesizing API Usage Examples
Synthesizing API Usage Examples Ray Buse
 
[DSC 2016] 系列活動:李泳泉 / 星火燎原 - Spark 機器學習初探
[DSC 2016] 系列活動:李泳泉 / 星火燎原 - Spark 機器學習初探[DSC 2016] 系列活動:李泳泉 / 星火燎原 - Spark 機器學習初探
[DSC 2016] 系列活動:李泳泉 / 星火燎原 - Spark 機器學習初探台灣資料科學年會
 
2011-03-29 London - drools
2011-03-29 London - drools2011-03-29 London - drools
2011-03-29 London - droolsGeoffrey De Smet
 
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTR
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTRT3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTR
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTRDavid Gómez García
 
Cloudera Sessions - Clinic 3 - Advanced Steps - Fast-track Development for ET...
Cloudera Sessions - Clinic 3 - Advanced Steps - Fast-track Development for ET...Cloudera Sessions - Clinic 3 - Advanced Steps - Fast-track Development for ET...
Cloudera Sessions - Clinic 3 - Advanced Steps - Fast-track Development for ET...Cloudera, Inc.
 
Mythbusting: Understanding How We Measure Performance at MongoDB
Mythbusting: Understanding How We Measure Performance at MongoDBMythbusting: Understanding How We Measure Performance at MongoDB
Mythbusting: Understanding How We Measure Performance at MongoDBMongoDB
 
Beginning direct3d gameprogrammingcpp02_20160324_jintaeks
Beginning direct3d gameprogrammingcpp02_20160324_jintaeksBeginning direct3d gameprogrammingcpp02_20160324_jintaeks
Beginning direct3d gameprogrammingcpp02_20160324_jintaeksJinTaek Seo
 
Map, flatmap and reduce are your new best friends (javaone, svcc)
Map, flatmap and reduce are your new best friends (javaone, svcc)Map, flatmap and reduce are your new best friends (javaone, svcc)
Map, flatmap and reduce are your new best friends (javaone, svcc)Chris Richardson
 

La actualidad más candente (20)

Building Rich Domain Models
Building Rich Domain ModelsBuilding Rich Domain Models
Building Rich Domain Models
 
OSDC.fr 2012 :: Cascalog : progammation logique pour Hadoop
OSDC.fr 2012 :: Cascalog : progammation logique pour HadoopOSDC.fr 2012 :: Cascalog : progammation logique pour Hadoop
OSDC.fr 2012 :: Cascalog : progammation logique pour Hadoop
 
Clojure And Swing
Clojure And SwingClojure And Swing
Clojure And Swing
 
[系列活動] Data exploration with modern R
[系列活動] Data exploration with modern R[系列活動] Data exploration with modern R
[系列活動] Data exploration with modern R
 
COLLADA & WebGL
COLLADA & WebGLCOLLADA & WebGL
COLLADA & WebGL
 
#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기
 
Building High Performance Web Applications and Sites
Building High Performance Web Applications and SitesBuilding High Performance Web Applications and Sites
Building High Performance Web Applications and Sites
 
Java Day-3
Java Day-3Java Day-3
Java Day-3
 
Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!
 
Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)
 
Synthesizing API Usage Examples
Synthesizing API Usage Examples Synthesizing API Usage Examples
Synthesizing API Usage Examples
 
Using Dojo
Using DojoUsing Dojo
Using Dojo
 
[DSC 2016] 系列活動:李泳泉 / 星火燎原 - Spark 機器學習初探
[DSC 2016] 系列活動:李泳泉 / 星火燎原 - Spark 機器學習初探[DSC 2016] 系列活動:李泳泉 / 星火燎原 - Spark 機器學習初探
[DSC 2016] 系列活動:李泳泉 / 星火燎原 - Spark 機器學習初探
 
2011-03-29 London - drools
2011-03-29 London - drools2011-03-29 London - drools
2011-03-29 London - drools
 
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTR
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTRT3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTR
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTR
 
Cloudera Sessions - Clinic 3 - Advanced Steps - Fast-track Development for ET...
Cloudera Sessions - Clinic 3 - Advanced Steps - Fast-track Development for ET...Cloudera Sessions - Clinic 3 - Advanced Steps - Fast-track Development for ET...
Cloudera Sessions - Clinic 3 - Advanced Steps - Fast-track Development for ET...
 
Mythbusting: Understanding How We Measure Performance at MongoDB
Mythbusting: Understanding How We Measure Performance at MongoDBMythbusting: Understanding How We Measure Performance at MongoDB
Mythbusting: Understanding How We Measure Performance at MongoDB
 
Beginning direct3d gameprogrammingcpp02_20160324_jintaeks
Beginning direct3d gameprogrammingcpp02_20160324_jintaeksBeginning direct3d gameprogrammingcpp02_20160324_jintaeks
Beginning direct3d gameprogrammingcpp02_20160324_jintaeks
 
Map, flatmap and reduce are your new best friends (javaone, svcc)
Map, flatmap and reduce are your new best friends (javaone, svcc)Map, flatmap and reduce are your new best friends (javaone, svcc)
Map, flatmap and reduce are your new best friends (javaone, svcc)
 
RealmDB for Android
RealmDB for AndroidRealmDB for Android
RealmDB for Android
 

Destacado (20)

Isaiah 22 commentary
Isaiah 22 commentaryIsaiah 22 commentary
Isaiah 22 commentary
 
77777
7777777777
77777
 
Cartilla
CartillaCartilla
Cartilla
 
Instrução técnica pm
Instrução técnica pmInstrução técnica pm
Instrução técnica pm
 
77777777
7777777777777777
77777777
 
Pasarela 2014 lista
Pasarela 2014 listaPasarela 2014 lista
Pasarela 2014 lista
 
4444444
44444444444444
4444444
 
Big Sky Developments 2013 Magazine
Big Sky Developments 2013 MagazineBig Sky Developments 2013 Magazine
Big Sky Developments 2013 Magazine
 
4444444
44444444444444
4444444
 
ABUELITO QUERIDO
ABUELITO QUERIDOABUELITO QUERIDO
ABUELITO QUERIDO
 
Spaun
SpaunSpaun
Spaun
 
ndertesat popullore korce *rafaela*
ndertesat popullore korce *rafaela*ndertesat popullore korce *rafaela*
ndertesat popullore korce *rafaela*
 
Viviendo con diabetes. tania apango
Viviendo con diabetes. tania apangoViviendo con diabetes. tania apango
Viviendo con diabetes. tania apango
 
Principio basicos peluquer+¡a-canina-
 Principio basicos peluquer+¡a-canina- Principio basicos peluquer+¡a-canina-
Principio basicos peluquer+¡a-canina-
 
Ilar eta baben landaketa (6.A-1)
Ilar eta baben landaketa (6.A-1)Ilar eta baben landaketa (6.A-1)
Ilar eta baben landaketa (6.A-1)
 
Dominio D y C
Dominio D y CDominio D y C
Dominio D y C
 
Esteracing
EsteracingEsteracing
Esteracing
 
A
AA
A
 
A31008 m383-f101-1-19 net
A31008 m383-f101-1-19 netA31008 m383-f101-1-19 net
A31008 m383-f101-1-19 net
 
Chanoeka
ChanoekaChanoeka
Chanoeka
 

Similar a Data Binding in qooxdoo

ES3-2020-P3 TDD Calculator
ES3-2020-P3 TDD CalculatorES3-2020-P3 TDD Calculator
ES3-2020-P3 TDD CalculatorDavid Rodenas
 
Dependency Injection Why is it awesome and Why should I care?
Dependency Injection Why is it awesome and Why should I care?Dependency Injection Why is it awesome and Why should I care?
Dependency Injection Why is it awesome and Why should I care?ColdFusionConference
 
Backbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The BrowserBackbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The BrowserHoward Lewis Ship
 
Symfony2 Service Container: Inject me, my friend
Symfony2 Service Container: Inject me, my friendSymfony2 Service Container: Inject me, my friend
Symfony2 Service Container: Inject me, my friendKirill Chebunin
 
Apache Calcite Tutorial - BOSS 21
Apache Calcite Tutorial - BOSS 21Apache Calcite Tutorial - BOSS 21
Apache Calcite Tutorial - BOSS 21Stamatis Zampetakis
 
Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Chris Ramsdale
 
CodeMash - Building Rich Apps with Groovy SwingBuilder
CodeMash - Building Rich Apps with Groovy SwingBuilderCodeMash - Building Rich Apps with Groovy SwingBuilder
CodeMash - Building Rich Apps with Groovy SwingBuilderAndres Almiray
 
20170624 GraphQL Presentation
20170624 GraphQL Presentation20170624 GraphQL Presentation
20170624 GraphQL PresentationMartin Heidegger
 
elm-d3 @ NYC D3.js Meetup (30 June, 2014)
elm-d3 @ NYC D3.js Meetup (30 June, 2014)elm-d3 @ NYC D3.js Meetup (30 June, 2014)
elm-d3 @ NYC D3.js Meetup (30 June, 2014)Spiros
 
Beijing Perl Workshop 2008 Hiveminder Secret Sauce
Beijing Perl Workshop 2008 Hiveminder Secret SauceBeijing Perl Workshop 2008 Hiveminder Secret Sauce
Beijing Perl Workshop 2008 Hiveminder Secret SauceJesse Vincent
 
MADlib Architecture and Functional Demo on How to Use MADlib/PivotalR
MADlib Architecture and Functional Demo on How to Use MADlib/PivotalRMADlib Architecture and Functional Demo on How to Use MADlib/PivotalR
MADlib Architecture and Functional Demo on How to Use MADlib/PivotalRPivotalOpenSourceHub
 
Will your code blend? : Toronto Code Camp 2010 : Barry Gervin
Will your code blend? : Toronto Code Camp 2010 : Barry GervinWill your code blend? : Toronto Code Camp 2010 : Barry Gervin
Will your code blend? : Toronto Code Camp 2010 : Barry GervinBarry Gervin
 
PostgreSQL Open SV 2018
PostgreSQL Open SV 2018PostgreSQL Open SV 2018
PostgreSQL Open SV 2018artgillespie
 
Scti 2011 minicurso jquery
Scti 2011 minicurso jqueryScti 2011 minicurso jquery
Scti 2011 minicurso jqueryciberglo
 
Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...Robert Schadek
 
PHP Machinist Presentation
PHP Machinist PresentationPHP Machinist Presentation
PHP Machinist PresentationAdam Englander
 

Similar a Data Binding in qooxdoo (20)

Demystifying The Solid Works Api
Demystifying The Solid Works ApiDemystifying The Solid Works Api
Demystifying The Solid Works Api
 
ES3-2020-P3 TDD Calculator
ES3-2020-P3 TDD CalculatorES3-2020-P3 TDD Calculator
ES3-2020-P3 TDD Calculator
 
Dependency Injection Why is it awesome and Why should I care?
Dependency Injection Why is it awesome and Why should I care?Dependency Injection Why is it awesome and Why should I care?
Dependency Injection Why is it awesome and Why should I care?
 
Backbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The BrowserBackbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The Browser
 
Symfony2 Service Container: Inject me, my friend
Symfony2 Service Container: Inject me, my friendSymfony2 Service Container: Inject me, my friend
Symfony2 Service Container: Inject me, my friend
 
Apache Calcite Tutorial - BOSS 21
Apache Calcite Tutorial - BOSS 21Apache Calcite Tutorial - BOSS 21
Apache Calcite Tutorial - BOSS 21
 
NoSQL Infrastructure
NoSQL InfrastructureNoSQL Infrastructure
NoSQL Infrastructure
 
Having Fun with Play
Having Fun with PlayHaving Fun with Play
Having Fun with Play
 
Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010
 
CodeMash - Building Rich Apps with Groovy SwingBuilder
CodeMash - Building Rich Apps with Groovy SwingBuilderCodeMash - Building Rich Apps with Groovy SwingBuilder
CodeMash - Building Rich Apps with Groovy SwingBuilder
 
Intro
IntroIntro
Intro
 
20170624 GraphQL Presentation
20170624 GraphQL Presentation20170624 GraphQL Presentation
20170624 GraphQL Presentation
 
elm-d3 @ NYC D3.js Meetup (30 June, 2014)
elm-d3 @ NYC D3.js Meetup (30 June, 2014)elm-d3 @ NYC D3.js Meetup (30 June, 2014)
elm-d3 @ NYC D3.js Meetup (30 June, 2014)
 
Beijing Perl Workshop 2008 Hiveminder Secret Sauce
Beijing Perl Workshop 2008 Hiveminder Secret SauceBeijing Perl Workshop 2008 Hiveminder Secret Sauce
Beijing Perl Workshop 2008 Hiveminder Secret Sauce
 
MADlib Architecture and Functional Demo on How to Use MADlib/PivotalR
MADlib Architecture and Functional Demo on How to Use MADlib/PivotalRMADlib Architecture and Functional Demo on How to Use MADlib/PivotalR
MADlib Architecture and Functional Demo on How to Use MADlib/PivotalR
 
Will your code blend? : Toronto Code Camp 2010 : Barry Gervin
Will your code blend? : Toronto Code Camp 2010 : Barry GervinWill your code blend? : Toronto Code Camp 2010 : Barry Gervin
Will your code blend? : Toronto Code Camp 2010 : Barry Gervin
 
PostgreSQL Open SV 2018
PostgreSQL Open SV 2018PostgreSQL Open SV 2018
PostgreSQL Open SV 2018
 
Scti 2011 minicurso jquery
Scti 2011 minicurso jqueryScti 2011 minicurso jquery
Scti 2011 minicurso jquery
 
Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...Asynchronous single page applications without a line of HTML or Javascript, o...
Asynchronous single page applications without a line of HTML or Javascript, o...
 
PHP Machinist Presentation
PHP Machinist PresentationPHP Machinist Presentation
PHP Machinist Presentation
 

Más de Martin Wittemann

Más de Martin Wittemann (8)

10 Jahre Webentwicklung - am Beispiel des Frameworks qooxdoo
10 Jahre Webentwicklung - am Beispiel des Frameworks qooxdoo10 Jahre Webentwicklung - am Beispiel des Frameworks qooxdoo
10 Jahre Webentwicklung - am Beispiel des Frameworks qooxdoo
 
Pointer events
Pointer eventsPointer events
Pointer events
 
qooxdoo 3.5
qooxdoo 3.5qooxdoo 3.5
qooxdoo 3.5
 
Cross-Platform Mobile Apps
Cross-Platform Mobile AppsCross-Platform Mobile Apps
Cross-Platform Mobile Apps
 
Qooxdoo at B::IT
Qooxdoo at B::ITQooxdoo at B::IT
Qooxdoo at B::IT
 
qooxdoo at VKSI-RIA-Comparison
qooxdoo at VKSI-RIA-Comparisonqooxdoo at VKSI-RIA-Comparison
qooxdoo at VKSI-RIA-Comparison
 
qooxdoo Decorators
qooxdoo Decoratorsqooxdoo Decorators
qooxdoo Decorators
 
qooxdoo Form Management
qooxdoo Form Managementqooxdoo Form Management
qooxdoo Form Management
 

Último

Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 

Último (20)

Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 

Data Binding in qooxdoo

Notas del editor

  1. - Vorstellen (Thema und mich) - Dauer erw&#xE4;hnen
  2. - Grundlagen f&#xFC;r Pr&#xE4;sentation - Keine lange qooxdoo oder JavaScript Einleitung - sollte jeder einigerma&#xDF;en kennen
  3. - Was ist Data Binding? - Nicht 100%ig definiert was dazu geh&#xF6;rt und was nicht. - Daten werden zwischen einer Quelle und einem Ziel synchronisiert. - verschiedene Transformationen - Hier, Model und View da es um UI Binding ging
  4. - Was ist Data Binding? - Nicht 100%ig definiert was dazu geh&#xF6;rt und was nicht. - Daten werden zwischen einer Quelle und einem Ziel synchronisiert. - verschiedene Transformationen - Hier, Model und View da es um UI Binding ging
  5. - Was ist Data Binding? - Nicht 100%ig definiert was dazu geh&#xF6;rt und was nicht. - Daten werden zwischen einer Quelle und einem Ziel synchronisiert. - verschiedene Transformationen - Hier, Model und View da es um UI Binding ging
  6. - Warum braucht man denn Data Binding? 1. Man kommt schneller zu einem Ergebnis (Time to market) 2. Man bekommt viele Funktionalit&#xE4;t geschenkt 3. Verringert das Fehlerrisiko da man getestete Komponenten verwendet 4. Dadurch hat man Vorteile den anderen Frameworks gegen&#xFC;ber bzw. holt deren Vorsprung wieder ein. 5. Der Wunsch besteht schon lange. Seit Mitte 2006 gibt es schon im qooxdoo eigenen Bugsystem 2 offe bugs f&#xFC;r data binding.
  7. Ganz kurz die wichtigsten Dinge ins Ged&#xE4;chtnis rufen. Es gibt ein Event System von qooxdoo welches &#xC4;nderungen von Werten propagieren kann. Zum Speichern von Werten werden oft Properties im Framework verwendet. F&#xFC;r diese werden die typischen Zugriffsmethoden automatisch erzeugt.
  8. - kleine Auffrischung der wichtigsten Dinge von JavaScript - Alle Objekte sind assoziative Arrays. - Funktionen an Objekten hei&#xDF;en Methoden - Methoden sind nur als Wert eines Arrays abgelegt - einige M&#xF6;glichkeiten, diese methoden aufzurufen - auf nummer 2 eingehen
  9. Das sollten eigentlich genug Grundlagen gewesen sein damit wir direkt ins Thema einsteigen k&#xF6;nnen. Bevor mit der Entwicklung des Data Binding f&#xFC;r qooxdoo begonnen wurde, wurde eine ausgiebige Analyse gemacht.
  10. - 1 1/2 Monate - drei Bereiche: JavaScript, Alternative und Native - JavaScript - SmartClient: gute dokumentation - dojo: viele stores - Alternative - Flex: sehr leichtgewichtig und gut f&#xFC;r enzelwerte - Native - Cocoa: Gute Controller-Konzepte, jedoch laden der Daten nicht drin - Eclipse: Sehr komplex, viel n&#xF6;tig um die Voraussetzungen zu schaffen - Backend wurde &#xFC;berpr&#xFC;ft aber es hat sich nichts geeignet
  11. - 1 1/2 Monate - drei Bereiche: JavaScript, Alternative und Native - JavaScript - SmartClient: gute dokumentation - dojo: viele stores - Alternative - Flex: sehr leichtgewichtig und gut f&#xFC;r enzelwerte - Native - Cocoa: Gute Controller-Konzepte, jedoch laden der Daten nicht drin - Eclipse: Sehr komplex, viel n&#xF6;tig um die Voraussetzungen zu schaffen - Backend wurde &#xFC;berpr&#xFC;ft aber es hat sich nichts geeignet
  12. - 1 1/2 Monate - drei Bereiche: JavaScript, Alternative und Native - JavaScript - SmartClient: gute dokumentation - dojo: viele stores - Alternative - Flex: sehr leichtgewichtig und gut f&#xFC;r enzelwerte - Native - Cocoa: Gute Controller-Konzepte, jedoch laden der Daten nicht drin - Eclipse: Sehr komplex, viel n&#xF6;tig um die Voraussetzungen zu schaffen - Backend wurde &#xFC;berpr&#xFC;ft aber es hat sich nichts geeignet
  13. - gar nicht genauer drauf eingehen - Auflistung nicht komplett - Dient nur als Ausschnitt
  14. - auch diese Liste ist nicht komplett - man kann sich ja viele use-cases denken - hier sind nur ein paar aufgelistet
  15. Jetzt kommen wir endlich zu dem interessanten Teil, n&#xE4;mlich zum Aufbau der Data Binding L&#xF6;sung f&#xFC;r qooxdoo. Ziel war es, Daten zu laden und mit der Oberfl&#xE4;che zu synchronisieren.
  16. - von links nach rechts - Data: Service, Datei, ... - DataStore: Verantwortlich die Daten zu besorgen und in das Model zu bringen - Model: H&#xE4;lt die Daten, reine Datenhaltung aus der Data Binding Sicht - Controller: &#xDC;bernimmt die Synchronisation zwischen Model und View - View: &#xFC;bliche qooxdoo widgets - Aufteilung in UI- und Backend-Binding - Trotz Backend, alles im Client - Schichtenansicht
  17. - Finden sich einige Teile wieder - Basis ist qooxdoo - f&#xFC;r die stores eine abstrakte Basisklasse - Models sind im groben einfache qooxdoo klassen - Controller hat das SVB als Basis - Synchronisation von Einzelwerten wie z.B. Strings, Booleans aber auch Referenzen
  18. - Finden sich einige Teile wieder - Basis ist qooxdoo - f&#xFC;r die stores eine abstrakte Basisklasse - Models sind im groben einfache qooxdoo klassen - Controller hat das SVB als Basis - Synchronisation von Einzelwerten wie z.B. Strings, Booleans aber auch Referenzen
  19. - Genau dieses schauen wir uns als erstes an
  20. - zuerst die Basis kl&#xE4;ren - Was braucht manzum synchronisieren 1. &#xC4;nderungen mitbekommen 2. allgemeine Zugriffsmethoden - JavaScript-Objekte gehen z.B. nicht => qooxdoo Properties! - Unterst&#xFC;tzung von change Events - Automatische Generierung der Zugriffsfunktionen - funktioniert auf allen Properties mit events im Framework --> gro&#xDF;e Unterst&#xFC;tzung schon vorhanden
  21. - Keine langen reden - Beispielhafter Ablauf - Zwei Objekte einer gleichen Klasse mit einem Property - a hat die 12 - binding aufsetzen
  22. - initial wird die 12 synchronisiert
  23. - &#xC4;nderungen in a bewirken &#xC4;nderungen in b
  24. - umgekehrt aber nicht --> unidirektional - bidirektional durch 2 bindings - Code sieht es sehr &#xFC;bersichtlich aus.
  25. - Konzept geht jedoch noch weiter - Quelle eine Objekt-Hierarchie - Binding &#xFC;ber diese Hirarchie
  26. - Auch hier wird die Zahl initial synchronisiert - &#xC4;nderungen werden &#xFC;bertragen
  27. - Auch hier wird die Zahl initial synchronisiert - &#xC4;nderungen werden &#xFC;bertragen
  28. - Auch hier wird die Zahl initial synchronisiert - &#xC4;nderungen werden &#xFC;bertragen
  29. - Auch hier wird die Zahl initial synchronisiert - &#xC4;nderungen werden &#xFC;bertragen
  30. - b wird auf null gesetzt --> prop in c wird reseted (kein Fehler) - d wird an stelle von c platziert --> 78 wird synchronisiert - Code sehr &#xE4;hnlich - Unterschied nur die property kette - Kann beliebig lange werden, wenn die events dazu vorhanden sind - Arrays k&#xF6;nnen auch darin vorkommen
  31. - b wird auf null gesetzt --> prop in c wird reseted (kein Fehler) - d wird an stelle von c platziert --> 78 wird synchronisiert - Code sehr &#xE4;hnlich - Unterschied nur die property kette - Kann beliebig lange werden, wenn die events dazu vorhanden sind - Arrays k&#xF6;nnen auch darin vorkommen
  32. - b wird auf null gesetzt --> prop in c wird reseted (kein Fehler) - d wird an stelle von c platziert --> 78 wird synchronisiert - Code sehr &#xE4;hnlich - Unterschied nur die property kette - Kann beliebig lange werden, wenn die events dazu vorhanden sind - Arrays k&#xF6;nnen auch darin vorkommen
  33. - b wird auf null gesetzt --> prop in c wird reseted (kein Fehler) - d wird an stelle von c platziert --> 78 wird synchronisiert - Code sehr &#xE4;hnlich - Unterschied nur die property kette - Kann beliebig lange werden, wenn die events dazu vorhanden sind - Arrays k&#xF6;nnen auch darin vorkommen
  34. - b wird auf null gesetzt --> prop in c wird reseted (kein Fehler) - d wird an stelle von c platziert --> 78 wird synchronisiert - Code sehr &#xE4;hnlich - Unterschied nur die property kette - Kann beliebig lange werden, wenn die events dazu vorhanden sind - Arrays k&#xF6;nnen auch darin vorkommen
  35. - b wird auf null gesetzt --> prop in c wird reseted (kein Fehler) - d wird an stelle von c platziert --> 78 wird synchronisiert - Code sehr &#xE4;hnlich - Unterschied nur die property kette - Kann beliebig lange werden, wenn die events dazu vorhanden sind - Arrays k&#xF6;nnen auch darin vorkommen
  36. - b wird auf null gesetzt --> prop in c wird reseted (kein Fehler) - d wird an stelle von c platziert --> 78 wird synchronisiert - Code sehr &#xE4;hnlich - Unterschied nur die property kette - Kann beliebig lange werden, wenn die events dazu vorhanden sind - Arrays k&#xF6;nnen auch darin vorkommen
  37. - b wird auf null gesetzt --> prop in c wird reseted (kein Fehler) - d wird an stelle von c platziert --> 78 wird synchronisiert - Code sehr &#xE4;hnlich - Unterschied nur die property kette - Kann beliebig lange werden, wenn die events dazu vorhanden sind - Arrays k&#xF6;nnen auch darin vorkommen
  38. - Viel der Probleme wurde schon durch qooxdoo gel&#xF6;st - Sehr gut dass dies verwendet werden konnte - technischer knackpunkt war der Aufruf der Zugriffsfunktionen - Einleitung erw&#xE4;hnen
  39. - gr&#xF6;&#xDF;te Herausforderung: die hohe dynamik des systems - Beispiel - Anpassungen auf an das Framework - nicht f&#xFC;r alles gibt es properties, aber die property getter und setter - eigentlich reicht ein event aus - es k&#xF6;nnen auch eventnamen angegeben werden - m&#xFC;ssen allerdings data events sein
  40. Dies war die Basis f&#xFC;r die Controller. Diese wollen wir uns jetzt genauer ansehen.
  41. Noch einmal zur Erinnerung. Die Controller befinden sich zwischen model und view und sind f&#xFC;r die synchronisation der beiden zust&#xE4;ndig.
  42. - Davor:zusammenhang mit views - Auflistung der verschiedensten Views - Auf jedes kurz eingehen - Jede hat bestimmte spezielle eigenschaften --> je view typ ein controller
  43. Object: verwaltet Felder mit einzelwerten wie z.b. textfeld, spinner usw. List: Alle listenartigen Widgets Tree: das tree widget Table: Die tabelle
  44. - Tabelle nicht umgesetzt - neue Tabelle in der Planung - Sp&#xE4;ter nat&#xFC;rlich angebunden - Alle weiteren Beschreibungen ohne den object controller - bequeme Zwischenschicht f&#xFC;r das Single Value Binding
  45. Zwei der in der Analyse herausgearbeiteten Features will ich jetzt mal genauer betrachten. Dabei handelt es sich um die Selektion und die Filterung. Diese wurden beide auf der Ebene der Controller eingebaut.
  46. - Selektion ohne das Data Binding - Beispiel: Liste - Selektion --> ListItem - anhand dieses Widgets selektion bestimmen - Selektion mit Data Binding - immer Modelobjekte stellvertretend f&#xFC;r die Listeneintr&#xE4;ge - genau diese werden auch bei der Selektion zur&#xFC;ckgeliefert - zwei Tatsachen: 1. Selektion ist ein array --> kann wieder an eine Liste gebunden werden 2. Man ist v&#xF6;llig abstrakt von den Widgets --> Selektion auf dem Baum liefert auch ein Modelobjekt zur&#xFC;ck
  47. - Selektion ohne das Data Binding - Beispiel: Liste - Selektion --> ListItem - anhand dieses Widgets selektion bestimmen - Selektion mit Data Binding - immer Modelobjekte stellvertretend f&#xFC;r die Listeneintr&#xE4;ge - genau diese werden auch bei der Selektion zur&#xFC;ckgeliefert - zwei Tatsachen: 1. Selektion ist ein array --> kann wieder an eine Liste gebunden werden 2. Man ist v&#xF6;llig abstrakt von den Widgets --> Selektion auf dem Baum liefert auch ein Modelobjekt zur&#xFC;ck
  48. - Selektion ohne das Data Binding - Beispiel: Liste - Selektion --> ListItem - anhand dieses Widgets selektion bestimmen - Selektion mit Data Binding - immer Modelobjekte stellvertretend f&#xFC;r die Listeneintr&#xE4;ge - genau diese werden auch bei der Selektion zur&#xFC;ckgeliefert - zwei Tatsachen: 1. Selektion ist ein array --> kann wieder an eine Liste gebunden werden 2. Man ist v&#xF6;llig abstrakt von den Widgets --> Selektion auf dem Baum liefert auch ein Modelobjekt zur&#xFC;ck
  49. - Selektion ohne das Data Binding - Beispiel: Liste - Selektion --> ListItem - anhand dieses Widgets selektion bestimmen - Selektion mit Data Binding - immer Modelobjekte stellvertretend f&#xFC;r die Listeneintr&#xE4;ge - genau diese werden auch bei der Selektion zur&#xFC;ckgeliefert - zwei Tatsachen: 1. Selektion ist ein array --> kann wieder an eine Liste gebunden werden 2. Man ist v&#xF6;llig abstrakt von den Widgets --> Selektion auf dem Baum liefert auch ein Modelobjekt zur&#xFC;ck
  50. - Selektion ohne das Data Binding - Beispiel: Liste - Selektion --> ListItem - anhand dieses Widgets selektion bestimmen - Selektion mit Data Binding - immer Modelobjekte stellvertretend f&#xFC;r die Listeneintr&#xE4;ge - genau diese werden auch bei der Selektion zur&#xFC;ckgeliefert - zwei Tatsachen: 1. Selektion ist ein array --> kann wieder an eine Liste gebunden werden 2. Man ist v&#xF6;llig abstrakt von den Widgets --> Selektion auf dem Baum liefert auch ein Modelobjekt zur&#xFC;ck
  51. - Selektion ohne das Data Binding - Beispiel: Liste - Selektion --> ListItem - anhand dieses Widgets selektion bestimmen - Selektion mit Data Binding - immer Modelobjekte stellvertretend f&#xFC;r die Listeneintr&#xE4;ge - genau diese werden auch bei der Selektion zur&#xFC;ckgeliefert - zwei Tatsachen: 1. Selektion ist ein array --> kann wieder an eine Liste gebunden werden 2. Man ist v&#xF6;llig abstrakt von den Widgets --> Selektion auf dem Baum liefert auch ein Modelobjekt zur&#xFC;ck
  52. - Selektion ohne das Data Binding - Beispiel: Liste - Selektion --> ListItem - anhand dieses Widgets selektion bestimmen - Selektion mit Data Binding - immer Modelobjekte stellvertretend f&#xFC;r die Listeneintr&#xE4;ge - genau diese werden auch bei der Selektion zur&#xFC;ckgeliefert - zwei Tatsachen: 1. Selektion ist ein array --> kann wieder an eine Liste gebunden werden 2. Man ist v&#xF6;llig abstrakt von den Widgets --> Selektion auf dem Baum liefert auch ein Modelobjekt zur&#xFC;ck
  53. - Selektion ohne das Data Binding - Beispiel: Liste - Selektion --> ListItem - anhand dieses Widgets selektion bestimmen - Selektion mit Data Binding - immer Modelobjekte stellvertretend f&#xFC;r die Listeneintr&#xE4;ge - genau diese werden auch bei der Selektion zur&#xFC;ckgeliefert - zwei Tatsachen: 1. Selektion ist ein array --> kann wieder an eine Liste gebunden werden 2. Man ist v&#xF6;llig abstrakt von den Widgets --> Selektion auf dem Baum liefert auch ein Modelobjekt zur&#xFC;ck
  54. - Selektion ohne das Data Binding - Beispiel: Liste - Selektion --> ListItem - anhand dieses Widgets selektion bestimmen - Selektion mit Data Binding - immer Modelobjekte stellvertretend f&#xFC;r die Listeneintr&#xE4;ge - genau diese werden auch bei der Selektion zur&#xFC;ckgeliefert - zwei Tatsachen: 1. Selektion ist ein array --> kann wieder an eine Liste gebunden werden 2. Man ist v&#xF6;llig abstrakt von den Widgets --> Selektion auf dem Baum liefert auch ein Modelobjekt zur&#xFC;ck
  55. - Selektion ohne das Data Binding - Beispiel: Liste - Selektion --> ListItem - anhand dieses Widgets selektion bestimmen - Selektion mit Data Binding - immer Modelobjekte stellvertretend f&#xFC;r die Listeneintr&#xE4;ge - genau diese werden auch bei der Selektion zur&#xFC;ckgeliefert - zwei Tatsachen: 1. Selektion ist ein array --> kann wieder an eine Liste gebunden werden 2. Man ist v&#xF6;llig abstrakt von den Widgets --> Selektion auf dem Baum liefert auch ein Modelobjekt zur&#xFC;ck
  56. - Selektion ohne das Data Binding - Beispiel: Liste - Selektion --> ListItem - anhand dieses Widgets selektion bestimmen - Selektion mit Data Binding - immer Modelobjekte stellvertretend f&#xFC;r die Listeneintr&#xE4;ge - genau diese werden auch bei der Selektion zur&#xFC;ckgeliefert - zwei Tatsachen: 1. Selektion ist ein array --> kann wieder an eine Liste gebunden werden 2. Man ist v&#xF6;llig abstrakt von den Widgets --> Selektion auf dem Baum liefert auch ein Modelobjekt zur&#xFC;ck
  57. - zuerst einige verschiedene Ans&#xE4;tze - Letztendlich ist es im controller durch index-mapping - So kann auch die Sortierung einfach umgesetzt werden
  58. - Gr&#xF6;&#xDF;tes Problem: binden nur von label und icon - ben&#xF6;tigte Werte werden in properties gespeichert => Erweiterung ben&#xF6;tigt - Delegate Pattern bietet die M&#xF6;glichkeiten
  59. - Urspr&#xFC;nglich aus dem bekannten Design Pattern Buch - private klasse &#xFC;bernimmt teile der Funktionalit&#xE4;t - methoden-wrapper f&#xFC;r bestimmte funktionen
  60. - anders in qooxdoo - Ansatz ist von cocoa bekannt - delegate wird von aussen gesetzt - jede Methode ist optional - es gibt daher immer eine Standardverhalten => So kann code in den controller gebracht werden
  61. - Sieht folgendermassen aus - Delegate ist einfaches Objekt - k&#xF6;nnte auch qooxdoo object sein (this.methodenname dann) - funktion wird dem controller &#xFC;bergeben (bindItem) - In dieser Funktion wird dem controller gesagt, welche properties er wie binden soll - Geschichte zum Zitat erz&#xE4;hlen
  62. Bestimmt hat sich der eine oder andere schon die Frage gestellt, wie die Models denn nun genau aussehen.
  63. Dies zeige ich jetzt. Hier noch einmal das Bild. Das Model ist, wie schon zu Beginn erw&#xE4;hnt, f&#xFC;r die Haltung der Daten verantwortlich.
  64. - Da die daten in Properties sollen bieten sich einfache qooxdoo Klassen an - Durch die change Events kann man so alle &#xC4;nderungen mitbekommen - Probleme mit Arrays - &#xC4;nderungen im Array --> bekommt man nicht mit => spezielle Array implementierung ben&#xF6;tigt - Aber nicht so spannend. Bei jeder &#xC4;nderung gibt es einen Event.
  65. Mit dem Models sind wir somit auch schon durch. Nicht gerade viel aber sie spielen in diesem Kapitel noch eine Rolle.
  66. Denn es ist hier noch einmal dargestellt, dass der Store f&#xFC;r die Datenbeschaffung und das schreiben in das Model verantwortlich ist.
  67. - Daten Laden = Welches Format? - Viele Denkbar - Hauptformat ist JSON
  68. - Daten Laden = Welches Format? - Viele Denkbar - Hauptformat ist JSON
  69. - Daten Laden = Welches Format? - Viele Denkbar - Hauptformat ist JSON
  70. - Daten Laden = Welches Format? - Viele Denkbar - Hauptformat ist JSON
  71. - Daten Laden = Welches Format? - Viele Denkbar - Hauptformat ist JSON
  72. - Daten Laden = Welches Format? - Viele Denkbar - Hauptformat ist JSON
  73. - Daten Laden = Welches Format? - Viele Denkbar - Hauptformat ist JSON
  74. - Diagramm sollte bekannt sein - Delegate Pattern - Was machen die zwei teile?
  75. - Store: Laden und bereitstellen - Marshaler: Generieren von Klassen und Instanzen
  76. - Erstellen von Klassen zur Laufzeit? - Wie werden Klassen in qooxdoo erstellt? - Hier der Code zu sehen
  77. - Gleiche bei der Definition der Klasse - Kann auch ersetzt werden
  78. - Sp&#xE4;testens jetzt sieht man klar, dass nur noch eine Funktion &#xFC;brig ist - Diese kann auch zur Laufzeit ausgef&#xFC;hrt werden. - Genau auf diese Weise werden die Klassen generiert - &#xDC;briger Parameter: Name und namespace der klasse - Wie benennt man denn die erzeugten Klassen?
  79. - Feststellen, was sie unterscheidet - Aufgabe - Halten von Daten in Properties - Properties sind nur leere Datenfelder ohne Typ --> nur der Namen unterscheidet die Klassen
  80. - Hash-Algorithmus ben&#xF6;tigt - Erste Idee: Konkatenieren der Property-Namen --> Geht nicht wegen der Reihenfolge
  81. - Hash-Algorithmus ben&#xF6;tigt - Erste Idee: Konkatenieren der Property-Namen --> Geht nicht wegen der Reihenfolge
  82. - Hash-Algorithmus ben&#xF6;tigt - Erste Idee: Konkatenieren der Property-Namen --> Geht nicht wegen der Reihenfolge
  83. - L&#xF6;sung: Sortieren - N&#xE4;chstes Problem - nicht eindeutig zuweisbar
  84. - L&#xF6;sung: Sortieren - N&#xE4;chstes Problem - nicht eindeutig zuweisbar
  85. - L&#xF6;sung: Sortieren - N&#xE4;chstes Problem - nicht eindeutig zuweisbar
  86. - L&#xF6;sung: Trennzeichen ben&#xF6;tigt - Welches? - Beispiel mit $ - Geht auch schief
  87. - L&#xF6;sung: Trennzeichen ben&#xF6;tigt - Welches? - Beispiel mit $ - Geht auch schief
  88. - L&#xF6;sung: Trennzeichen ben&#xF6;tigt - Welches? - Beispiel mit $ - Geht auch schief
  89. - n&#xE4;chster Versuch --> Blick in die JSON Spec - Was ist in JSON nicht ok aber in JavaScript - einzig m&#xF6;gliches Zeichen sind die quotes --> Jetzt geht es immer
  90. - n&#xE4;chster Versuch --> Blick in die JSON Spec - Was ist in JSON nicht ok aber in JavaScript - einzig m&#xF6;gliches Zeichen sind die quotes --> Jetzt geht es immer
  91. - nicht nur der reine JSON Store wurde umgesetzt - Proof of concept - twitter vie REST angebunden, R&#xFC;ckgabeformat JSON - Beispielapplikation mit Gears gebaut - flickr angebunden (auch JSON)
  92. Jetzt haben wir alle Teile im einzelnen gesehen.
  93. Ich hoffe mal es hat jeder einigerma&#xDF;en verstanden, welcher Teil was macht. Um dies zu verdeutlichen, habe ich noch zwei Beispiele aufbereitet, die dasd Zusammenspiel verdeutlichen.
  94. - Erstes Beispiel: Laden dieser JSON Datei und anzeigen in einer Liste - Daten entsprechen keinem vordefinierten Format - K&#xF6;nnten auch Objekte in dem Array sein - Code auf der folgenden Seite w&#xFC;rde aber anders aussehen
  95. 1. Liste erzeugen und anzeigen - hat noch gar nix mit data binding zu tun 2. controller erzeugen. - kein Model gesetzt - direkt mit der liste verbunden 3. Store erzeugen - kennt die URL 4. Zusammenbinden vie Single Value Binding von Store und Controller - Kein Model gesehen - Wo ist das aber? - Sehen wir gleich.
  96. - Zuerst: Ergebnis - Einfach und nichts besonderes - Aber nur 5 Zeilen code!
  97. - Zur&#xFC;ck zum verlorenen Model - Ablauf zeigt noch mal den Zeitlichen ablauft des Codes 1. Daten sind schon da 2. Liste wird erzeugt 3. Controller wird erzeugt. - kennt die liste - model ist null 4. Store wird erzeugt - kennt die daten - model ist null - beginnt mit dem laden 5. binding der model properties wird erstellt - Code fertig 6. Asynchron kommen die Daten an - Model wird mit dem Daten erstellt
  98. - Zur&#xFC;ck zum verlorenen Model - Ablauf zeigt noch mal den Zeitlichen ablauft des Codes 1. Daten sind schon da 2. Liste wird erzeugt 3. Controller wird erzeugt. - kennt die liste - model ist null 4. Store wird erzeugt - kennt die daten - model ist null - beginnt mit dem laden 5. binding der model properties wird erstellt - Code fertig 6. Asynchron kommen die Daten an - Model wird mit dem Daten erstellt
  99. - Zur&#xFC;ck zum verlorenen Model - Ablauf zeigt noch mal den Zeitlichen ablauft des Codes 1. Daten sind schon da 2. Liste wird erzeugt 3. Controller wird erzeugt. - kennt die liste - model ist null 4. Store wird erzeugt - kennt die daten - model ist null - beginnt mit dem laden 5. binding der model properties wird erstellt - Code fertig 6. Asynchron kommen die Daten an - Model wird mit dem Daten erstellt
  100. - Zur&#xFC;ck zum verlorenen Model - Ablauf zeigt noch mal den Zeitlichen ablauft des Codes 1. Daten sind schon da 2. Liste wird erzeugt 3. Controller wird erzeugt. - kennt die liste - model ist null 4. Store wird erzeugt - kennt die daten - model ist null - beginnt mit dem laden 5. binding der model properties wird erstellt - Code fertig 6. Asynchron kommen die Daten an - Model wird mit dem Daten erstellt
  101. - Zur&#xFC;ck zum verlorenen Model - Ablauf zeigt noch mal den Zeitlichen ablauft des Codes 1. Daten sind schon da 2. Liste wird erzeugt 3. Controller wird erzeugt. - kennt die liste - model ist null 4. Store wird erzeugt - kennt die daten - model ist null - beginnt mit dem laden 5. binding der model properties wird erstellt - Code fertig 6. Asynchron kommen die Daten an - Model wird mit dem Daten erstellt
  102. - Zur&#xFC;ck zum verlorenen Model - Ablauf zeigt noch mal den Zeitlichen ablauft des Codes 1. Daten sind schon da 2. Liste wird erzeugt 3. Controller wird erzeugt. - kennt die liste - model ist null 4. Store wird erzeugt - kennt die daten - model ist null - beginnt mit dem laden 5. binding der model properties wird erstellt - Code fertig 6. Asynchron kommen die Daten an - Model wird mit dem Daten erstellt
  103. - Zur&#xFC;ck zum verlorenen Model - Ablauf zeigt noch mal den Zeitlichen ablauft des Codes 1. Daten sind schon da 2. Liste wird erzeugt 3. Controller wird erzeugt. - kennt die liste - model ist null 4. Store wird erzeugt - kennt die daten - model ist null - beginnt mit dem laden 5. binding der model properties wird erstellt - Code fertig 6. Asynchron kommen die Daten an - Model wird mit dem Daten erstellt
  104. - Zur&#xFC;ck zum verlorenen Model - Ablauf zeigt noch mal den Zeitlichen ablauft des Codes 1. Daten sind schon da 2. Liste wird erzeugt 3. Controller wird erzeugt. - kennt die liste - model ist null 4. Store wird erzeugt - kennt die daten - model ist null - beginnt mit dem laden 5. binding der model properties wird erstellt - Code fertig 6. Asynchron kommen die Daten an - Model wird mit dem Daten erstellt
  105. - Zur&#xFC;ck zum verlorenen Model - Ablauf zeigt noch mal den Zeitlichen ablauft des Codes 1. Daten sind schon da 2. Liste wird erzeugt 3. Controller wird erzeugt. - kennt die liste - model ist null 4. Store wird erzeugt - kennt die daten - model ist null - beginnt mit dem laden 5. binding der model properties wird erstellt - Code fertig 6. Asynchron kommen die Daten an - Model wird mit dem Daten erstellt
  106. - Zur&#xFC;ck zum verlorenen Model - Ablauf zeigt noch mal den Zeitlichen ablauft des Codes 1. Daten sind schon da 2. Liste wird erzeugt 3. Controller wird erzeugt. - kennt die liste - model ist null 4. Store wird erzeugt - kennt die daten - model ist null - beginnt mit dem laden 5. binding der model properties wird erstellt - Code fertig 6. Asynchron kommen die Daten an - Model wird mit dem Daten erstellt
  107. - Zur&#xFC;ck zum verlorenen Model - Ablauf zeigt noch mal den Zeitlichen ablauft des Codes 1. Daten sind schon da 2. Liste wird erzeugt 3. Controller wird erzeugt. - kennt die liste - model ist null 4. Store wird erzeugt - kennt die daten - model ist null - beginnt mit dem laden 5. binding der model properties wird erstellt - Code fertig 6. Asynchron kommen die Daten an - Model wird mit dem Daten erstellt
  108. - Zur&#xFC;ck zum verlorenen Model - Ablauf zeigt noch mal den Zeitlichen ablauft des Codes 1. Daten sind schon da 2. Liste wird erzeugt 3. Controller wird erzeugt. - kennt die liste - model ist null 4. Store wird erzeugt - kennt die daten - model ist null - beginnt mit dem laden 5. binding der model properties wird erstellt - Code fertig 6. Asynchron kommen die Daten an - Model wird mit dem Daten erstellt
  109. - Zur&#xFC;ck zum verlorenen Model - Ablauf zeigt noch mal den Zeitlichen ablauft des Codes 1. Daten sind schon da 2. Liste wird erzeugt 3. Controller wird erzeugt. - kennt die liste - model ist null 4. Store wird erzeugt - kennt die daten - model ist null - beginnt mit dem laden 5. binding der model properties wird erstellt - Code fertig 6. Asynchron kommen die Daten an - Model wird mit dem Daten erstellt