Data Binding in qooxdoo

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
1 of 109

Recommended

Design Patterns Reconsidered by
Design Patterns ReconsideredDesign Patterns Reconsidered
Design Patterns ReconsideredAlex Miller
1.7K views55 slides
Groovy On Trading Desk (2010) by
Groovy On Trading Desk (2010)Groovy On Trading Desk (2010)
Groovy On Trading Desk (2010)Jonathan Felch
2K views40 slides
Soft Shake Event / A soft introduction to Neo4J by
Soft Shake Event / A soft introduction to Neo4JSoft Shake Event / A soft introduction to Neo4J
Soft Shake Event / A soft introduction to Neo4JFlorent Biville
959 views104 slides
Groovy Finance by
Groovy FinanceGroovy Finance
Groovy FinanceJonathan Felch
3.4K views38 slides
DevFest Istanbul - a free guided tour of Neo4J by
DevFest Istanbul - a free guided tour of Neo4JDevFest Istanbul - a free guided tour of Neo4J
DevFest Istanbul - a free guided tour of Neo4JFlorent Biville
890 views105 slides
Singletons in PHP - Why they are bad and how you can eliminate them from your... by
Singletons in PHP - Why they are bad and how you can eliminate them from your...Singletons in PHP - Why they are bad and how you can eliminate them from your...
Singletons in PHP - Why they are bad and how you can eliminate them from your...go_oh
43.5K views53 slides

More Related Content

What's hot

Building Rich Domain Models by
Building Rich Domain ModelsBuilding Rich Domain Models
Building Rich Domain ModelsChris Richardson
8.1K views68 slides
OSDC.fr 2012 :: Cascalog : progammation logique pour Hadoop by
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
701 views22 slides
Clojure And Swing by
Clojure And SwingClojure And Swing
Clojure And SwingSkills Matter
3.6K views44 slides
[系列活動] Data exploration with modern R by
[系列活動] Data exploration with modern R[系列活動] Data exploration with modern R
[系列活動] Data exploration with modern R台灣資料科學年會
4.7K views61 slides
COLLADA & WebGL by
COLLADA & WebGLCOLLADA & WebGL
COLLADA & WebGLRemi Arnaud
5.8K views63 slides
#살아있다 #자프링외길12년차 #코프링2개월생존기 by
#살아있다 #자프링외길12년차 #코프링2개월생존기#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기Arawn Park
1.8K views82 slides

What's hot(20)

COLLADA & WebGL by Remi Arnaud
COLLADA & WebGLCOLLADA & WebGL
COLLADA & WebGL
Remi Arnaud5.8K views
#살아있다 #자프링외길12년차 #코프링2개월생존기 by Arawn Park
#살아있다 #자프링외길12년차 #코프링2개월생존기#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기
Arawn Park1.8K views
Building High Performance Web Applications and Sites by goodfriday
Building High Performance Web Applications and SitesBuilding High Performance Web Applications and Sites
Building High Performance Web Applications and Sites
goodfriday451 views
Data access 2.0? Please welcome: Spring Data! by Oliver Gierke
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 Gierke2K views
Hybrid rule engines (rulesfest 2010) by Geoffrey De Smet
Hybrid rule engines (rulesfest 2010)Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)
Geoffrey De Smet1.2K views
Synthesizing API Usage Examples by Ray Buse
Synthesizing API Usage Examples Synthesizing API Usage Examples
Synthesizing API Usage Examples
Ray Buse2K views
[DSC 2016] 系列活動:李泳泉 / 星火燎原 - Spark 機器學習初探 by 台灣資料科學年會
[DSC 2016] 系列活動:李泳泉 / 星火燎原 - Spark 機器學習初探[DSC 2016] 系列活動:李泳泉 / 星火燎原 - Spark 機器學習初探
[DSC 2016] 系列活動:李泳泉 / 星火燎原 - Spark 機器學習初探
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTR by David Gómez García
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... by Cloudera, Inc.
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.1K views
Mythbusting: Understanding How We Measure Performance at MongoDB by MongoDB
Mythbusting: Understanding How We Measure Performance at MongoDBMythbusting: Understanding How We Measure Performance at MongoDB
Mythbusting: Understanding How We Measure Performance at MongoDB
MongoDB1.1K views
Beginning direct3d gameprogrammingcpp02_20160324_jintaeks by JinTaek Seo
Beginning direct3d gameprogrammingcpp02_20160324_jintaeksBeginning direct3d gameprogrammingcpp02_20160324_jintaeks
Beginning direct3d gameprogrammingcpp02_20160324_jintaeks
JinTaek Seo1.2K views
Map, flatmap and reduce are your new best friends (javaone, svcc) by Chris Richardson
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 Richardson1.5K views

Viewers also liked

Isaiah 22 commentary by
Isaiah 22 commentaryIsaiah 22 commentary
Isaiah 22 commentaryGLENN PEASE
552 views120 slides
77777 by
7777777777
77777Usercay96wkjp6
852 views50 slides
Cartilla by
CartillaCartilla
Cartillarodriguez1020
597 views38 slides
Instrução técnica pm by
Instrução técnica pmInstrução técnica pm
Instrução técnica pmFabio Santos
585 views3 slides
77777777 by
7777777777777777
77777777Francisca De los Ángeles
510 views5 slides
Pasarela 2014 lista by
Pasarela 2014 listaPasarela 2014 lista
Pasarela 2014 listaSEMANARIOCAUDILLO
411 views74 slides

Viewers also liked(20)

Isaiah 22 commentary by GLENN PEASE
Isaiah 22 commentaryIsaiah 22 commentary
Isaiah 22 commentary
GLENN PEASE552 views
Instrução técnica pm by Fabio Santos
Instrução técnica pmInstrução técnica pm
Instrução técnica pm
Fabio Santos585 views
Big Sky Developments 2013 Magazine by Jen Hanrahan
Big Sky Developments 2013 MagazineBig Sky Developments 2013 Magazine
Big Sky Developments 2013 Magazine
Jen Hanrahan6.7K views
ndertesat popullore korce *rafaela* by Vajza Vogel
ndertesat popullore korce *rafaela*ndertesat popullore korce *rafaela*
ndertesat popullore korce *rafaela*
Vajza Vogel1.7K views
Principio basicos peluquer+¡a-canina- by fritrozo
 Principio basicos peluquer+¡a-canina- Principio basicos peluquer+¡a-canina-
Principio basicos peluquer+¡a-canina-
fritrozo819 views
Ilar eta baben landaketa (6.A-1) by barelikos6maila
Ilar eta baben landaketa (6.A-1)Ilar eta baben landaketa (6.A-1)
Ilar eta baben landaketa (6.A-1)
barelikos6maila362 views
A31008 m383-f101-1-19 net by Davor Prezel
A31008 m383-f101-1-19 netA31008 m383-f101-1-19 net
A31008 m383-f101-1-19 net
Davor Prezel713 views

Similar to Data Binding in qooxdoo

Demystifying The Solid Works Api by
Demystifying The Solid Works ApiDemystifying The Solid Works Api
Demystifying The Solid Works ApiRazorleaf Corporation
9.8K views90 slides
ES3-2020-P3 TDD Calculator by
ES3-2020-P3 TDD CalculatorES3-2020-P3 TDD Calculator
ES3-2020-P3 TDD CalculatorDavid Rodenas
114 views41 slides
Dependency Injection Why is it awesome and Why should I care? by
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
1.3K views108 slides
Backbone.js: Run your Application Inside The Browser by
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
2.7K views85 slides
Symfony2 Service Container: Inject me, my friend by
Symfony2 Service Container: Inject me, my friendSymfony2 Service Container: Inject me, my friend
Symfony2 Service Container: Inject me, my friendKirill Chebunin
8.2K views43 slides
Apache Calcite Tutorial - BOSS 21 by
Apache Calcite Tutorial - BOSS 21Apache Calcite Tutorial - BOSS 21
Apache Calcite Tutorial - BOSS 21Stamatis Zampetakis
663 views83 slides

Similar to Data Binding in qooxdoo(20)

ES3-2020-P3 TDD Calculator by David Rodenas
ES3-2020-P3 TDD CalculatorES3-2020-P3 TDD Calculator
ES3-2020-P3 TDD Calculator
David Rodenas114 views
Dependency Injection Why is it awesome and Why should I care? by ColdFusionConference
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 by Howard Lewis Ship
Backbone.js: Run your Application Inside The BrowserBackbone.js: Run your Application Inside The Browser
Backbone.js: Run your Application Inside The Browser
Howard Lewis Ship2.7K views
Symfony2 Service Container: Inject me, my friend by Kirill Chebunin
Symfony2 Service Container: Inject me, my friendSymfony2 Service Container: Inject me, my friend
Symfony2 Service Container: Inject me, my friend
Kirill Chebunin8.2K views
Building Web Apps Sanely - EclipseCon 2010 by Chris Ramsdale
Building Web Apps Sanely - EclipseCon 2010Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010
Chris Ramsdale1.8K views
CodeMash - Building Rich Apps with Groovy SwingBuilder by Andres Almiray
CodeMash - Building Rich Apps with Groovy SwingBuilderCodeMash - Building Rich Apps with Groovy SwingBuilder
CodeMash - Building Rich Apps with Groovy SwingBuilder
Andres Almiray3.3K views
Intro by bspremo
IntroIntro
Intro
bspremo433 views
elm-d3 @ NYC D3.js Meetup (30 June, 2014) by Spiros
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 1.2K views
Beijing Perl Workshop 2008 Hiveminder Secret Sauce by Jesse Vincent
Beijing Perl Workshop 2008 Hiveminder Secret SauceBeijing Perl Workshop 2008 Hiveminder Secret Sauce
Beijing Perl Workshop 2008 Hiveminder Secret Sauce
Jesse Vincent1.2K views
MADlib Architecture and Functional Demo on How to Use MADlib/PivotalR by PivotalOpenSourceHub
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 by 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
Barry Gervin1.4K views
PostgreSQL Open SV 2018 by artgillespie
PostgreSQL Open SV 2018PostgreSQL Open SV 2018
PostgreSQL Open SV 2018
artgillespie166 views
Scti 2011 minicurso jquery by ciberglo
Scti 2011 minicurso jqueryScti 2011 minicurso jquery
Scti 2011 minicurso jquery
ciberglo819 views
Asynchronous single page applications without a line of HTML or Javascript, o... by Robert Schadek
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 Schadek1.1K views
PHP Machinist Presentation by Adam Englander
PHP Machinist PresentationPHP Machinist Presentation
PHP Machinist Presentation
Adam Englander4.1K views

More from Martin Wittemann

10 Jahre Webentwicklung - am Beispiel des Frameworks qooxdoo by
10 Jahre Webentwicklung - am Beispiel des Frameworks qooxdoo10 Jahre Webentwicklung - am Beispiel des Frameworks qooxdoo
10 Jahre Webentwicklung - am Beispiel des Frameworks qooxdooMartin Wittemann
662 views35 slides
Pointer events by
Pointer eventsPointer events
Pointer eventsMartin Wittemann
1.5K views68 slides
qooxdoo 3.5 by
qooxdoo 3.5qooxdoo 3.5
qooxdoo 3.5Martin Wittemann
4.3K views47 slides
Cross-Platform Mobile Apps by
Cross-Platform Mobile AppsCross-Platform Mobile Apps
Cross-Platform Mobile AppsMartin Wittemann
648 views71 slides
Qooxdoo at B::IT by
Qooxdoo at B::ITQooxdoo at B::IT
Qooxdoo at B::ITMartin Wittemann
1.3K views55 slides
qooxdoo at VKSI-RIA-Comparison by
qooxdoo at VKSI-RIA-Comparisonqooxdoo at VKSI-RIA-Comparison
qooxdoo at VKSI-RIA-ComparisonMartin Wittemann
1.1K views51 slides

More from Martin Wittemann(8)

Recently uploaded

Democratising digital commerce in India-Report by
Democratising digital commerce in India-ReportDemocratising digital commerce in India-Report
Democratising digital commerce in India-ReportKapil Khandelwal (KK)
15 views161 slides
Serverless computing with Google Cloud (2023-24) by
Serverless computing with Google Cloud (2023-24)Serverless computing with Google Cloud (2023-24)
Serverless computing with Google Cloud (2023-24)wesley chun
11 views33 slides
HTTP headers that make your website go faster - devs.gent November 2023 by
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023Thijs Feryn
22 views151 slides
Vertical User Stories by
Vertical User StoriesVertical User Stories
Vertical User StoriesMoisés Armani Ramírez
14 views16 slides
Evolving the Network Automation Journey from Python to Platforms by
Evolving the Network Automation Journey from Python to PlatformsEvolving the Network Automation Journey from Python to Platforms
Evolving the Network Automation Journey from Python to PlatformsNetwork Automation Forum
13 views21 slides
The details of description: Techniques, tips, and tangents on alternative tex... by
The details of description: Techniques, tips, and tangents on alternative tex...The details of description: Techniques, tips, and tangents on alternative tex...
The details of description: Techniques, tips, and tangents on alternative tex...BookNet Canada
127 views24 slides

Recently uploaded(20)

Serverless computing with Google Cloud (2023-24) by wesley chun
Serverless computing with Google Cloud (2023-24)Serverless computing with Google Cloud (2023-24)
Serverless computing with Google Cloud (2023-24)
wesley chun11 views
HTTP headers that make your website go faster - devs.gent November 2023 by Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn22 views
The details of description: Techniques, tips, and tangents on alternative tex... by BookNet Canada
The details of description: Techniques, tips, and tangents on alternative tex...The details of description: Techniques, tips, and tangents on alternative tex...
The details of description: Techniques, tips, and tangents on alternative tex...
BookNet Canada127 views
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker37 views
STPI OctaNE CoE Brochure.pdf by madhurjyapb
STPI OctaNE CoE Brochure.pdfSTPI OctaNE CoE Brochure.pdf
STPI OctaNE CoE Brochure.pdf
madhurjyapb14 views
handbook for web 3 adoption.pdf by Liveplex
handbook for web 3 adoption.pdfhandbook for web 3 adoption.pdf
handbook for web 3 adoption.pdf
Liveplex22 views
STKI Israeli Market Study 2023 corrected forecast 2023_24 v3.pdf by Dr. Jimmy Schwarzkopf
STKI Israeli Market Study 2023   corrected forecast 2023_24 v3.pdfSTKI Israeli Market Study 2023   corrected forecast 2023_24 v3.pdf
STKI Israeli Market Study 2023 corrected forecast 2023_24 v3.pdf
Case Study Copenhagen Energy and Business Central.pdf by Aitana
Case Study Copenhagen Energy and Business Central.pdfCase Study Copenhagen Energy and Business Central.pdf
Case Study Copenhagen Energy and Business Central.pdf
Aitana16 views
Voice Logger - Telephony Integration Solution at Aegis by Nirmal Sharma
Voice Logger - Telephony Integration Solution at AegisVoice Logger - Telephony Integration Solution at Aegis
Voice Logger - Telephony Integration Solution at Aegis
Nirmal Sharma39 views
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ... by Jasper Oosterveld
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...

Data Binding in qooxdoo

Editor's Notes

  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