SlideShare a Scribd company logo
A Mobile App
                Development Toolkit
                Rebecca Murphey • BK.js • January 2012



Tuesday, January 17, 12
Tuesday, January 17, 12
Tuesday, January 17, 12
Tuesday, January 17, 12
Callback
                          Cordova
Tuesday, January 17, 12
command line tools create the structure for an
                app, plus all the pieces you’ll need
                application framework javascript, html
                templates, css via sass
                builder generates production-ready builds for
                Android, iOS


Tuesday, January 17, 12
bit.ly/toura-mulberry
                bit.ly/toura-mulberry-demos




Tuesday, January 17, 12
Storytime!
Tuesday, January 17, 12
Tuesday, January 17, 12
$('#btn-co-complete').live('click', function() {
             jobCompleted = true;
             $.mobile.changePage('#page-clockout-deficiency', {changeHash: false});
         });

         $('#btn-co-nocomplete').live('click', function() {
             jobCompleted = false;
             $.mobile.changePage('#page-clockout-deficiency', {changeHash: false});
         });

         $('#btn-co-nodef').live('click', function() {
             clockOut(activeJob, { completed:jobCompleted }, DW_JOB_COMPLETED);
         });

         $('#btn-co-otherdef').live('click', function() {
             $.mobile.changePage('#page-clockout-redtag', {changeHash: false});
         });

         $('#btn-co-redtag').live('click', function() {
             clockOut(activeJob, { completed:jobCompleted, redTag:true }, DW_JOB_FOLLOWUP);
         });

         $('#btn-co-noredtag').live('click', function() {
             $('#page-clockout-resolve').page();
             $.mobile.changePage('#page-clockout-resolve', {changeHash: false});
         });

               $('#btn-clockout-resolve').live('click', function() {
                       switch ($('#page-clockout-resolve :checked').val()) {
Tuesday, January 17, 12
                       case 'return':
Tuesday, January 17, 12
Mulberry apps are architected feels like
                We can write JavaScript thatfor change.this.

Tuesday, January 17, 12
command line interface create the structure
                for an app, plus all the pieces you’ll need
                application framework javascript, html
                templates, css via sass
                builder generates production-ready builds for
                Android, iOS




Tuesday, January 17, 12
Tuesday, January 17, 12
Tuesday, January 17, 12
routes manage high-level application state
                components receive and render data,
                and react to user input
                capabilities provide data to components,
                and broker communications between them
                page de nitions reusable groupings
                of components and capabilities
                stores persist data on the device, make that
                data query-able, and return model instances


Tuesday, January 17, 12
routes manage high-level application state




Tuesday, January 17, 12
$YOURAPP/javascript/routes.js

        mulberry.page('/todos', {
          name : 'Todos',
          pageDef : 'todos'
        }, true);

        mulberry.page('/completed', {
          name : 'Completed',
          pageDef : 'completed'
        });




                                        #/todos   #/completed

Tuesday, January 17, 12
stores persist data on the device, make that
                data query-able, and return model instances




Tuesday, January 17, 12
$YOURAPP/javascript/stores/todos.js

                mulberry.store('todos', {
                  model : 'Todo',

                    finish : function(id) {
                       this.invoke(id, 'finish');
                    },

                  unfinish : function(id) {
                    this.invoke(id, 'unfinish');
                  }
                });




Tuesday, January 17, 12
page de nitions reusable groupings
                of components and capabilities




Tuesday, January 17, 12
todos:
                            capabilities:
                            - name: PageTodos
                            screens:
                              - name: index
                                regions:
                                  - components:
                                     - custom.TodoForm
                                  - className: list
                                    scrollable: true
                                    components:
                                     - custom.TodoList
                                  - components:
                                     - custom.TodoTools




                          NB: You can define this with JavaScript, too,
                          using toura.pageDef(‘todos’, { ... }).




Tuesday, January 17, 12
components receive and render data,
                and react to user input




Tuesday, January 17, 12
$YOURAPP/javascript/components/TodoForm.js


           mulberry.component('TodoForm', {
             componentTemplate : dojo.cache('client.components', 'TodoForm/TodoForm.haml'),

               init : function() {
                 this.connect(this.domNode, 'submit', function(e) {
                   e.preventDefault();

                      var description = dojo.trim(this.descriptionInput.value),
                          item;

                      if (!description) { return; }

                      item = { description : description };
                      this.domNode.reset();
                      this.onAdd(item);
                    });
               },

             onAdd : function(item) { }
           });




Tuesday, January 17, 12
$YOURAPP/javascript/components/TodoForm/TodoForm.haml

                 %form.component.todo-form
                   %input{ placeholder : 'New todo', dojoAttachPoint : 'descriptionInput' }
                   %button{ dojoAttachPoint : 'saveButton' } Add




Tuesday, January 17, 12
$YOURAPP/javascript/components/TodoForm.js


           mulberry.component('TodoForm', {
             componentTemplate : dojo.cache('client.components', 'TodoForm/TodoForm.haml'),

               init : function() {
                 this.connect(this.domNode, 'submit', function(e) {
                   e.preventDefault();

                      var description = dojo.trim(this.descriptionInput.value),
                          item;

                      if (!description) { return; }

                      item = { description : description };
                      this.domNode.reset();
                      this.onAdd(item);
                    });
               },

             onAdd : function(item) { }
           });




Tuesday, January 17, 12
capabilities provide data to components,
                and broker communications between them




Tuesday, January 17, 12
mulberry.capability('PageTodos', {
            todos:
                                              requirements : {
              capabilities:
                                                 todoList : 'custom.TodoList',
              - name: PageTodos
                                                 todoForm : 'custom.TodoForm',
              screens:
                                                 todoTools : 'custom.TodoTools'
                - name: index
                                              },
                  regions:
                    - components:
                                              connects : [
                       - custom.TodoForm
                                                 [ 'todoForm', 'onAdd', '_add' ],
                    - className: list
                                                 [ 'todoList', 'onComplete', '_complete' ],
                      scrollable: true
                                                 [ 'todoList', 'onDelete', '_delete' ],
                      components:
                                                 [ 'todoTools', 'onCompleteAll', '_completeAll' ]
                       - custom.TodoList
                                              ],
                    - components:
                       - custom.TodoTools
                                              init : function() {
                                                 this.todos = client.stores.todos;
                                                 this._updateList();
                                              },

                                              _add : function(item) {
                                                 this.todos.add(item);
                                                 this._updateList();
                                              },

                                             _delete : function(id) {
                                                 this.todos.remove(id);
                                                 this._updateList();
                                              },


Tuesday, January 17, 12                       _complete : function(id) {
mulberry.capability('PageTodos', {
            todos:
                                              requirements : {
              capabilities:
                                                 todoList : 'custom.TodoList',
              - name: PageTodos
                                                 todoForm : 'custom.TodoForm',
              screens:
                                                 todoTools : 'custom.TodoTools'
                - name: index
                                              },
                  regions:
                    - components:
                                              connects : [
                       - custom.TodoForm
                                                 [ 'todoForm', 'onAdd', '_add' ],
                    - className: list
                                                 [ 'todoList', 'onComplete', '_complete' ],
                      scrollable: true
                                                 [ 'todoList', 'onDelete', '_delete' ],
                      components:
                                                 [ 'todoTools', 'onCompleteAll', '_completeAll' ]
                       - custom.TodoList
                                              ],
                    - components:
                       - custom.TodoTools
                                              init : function() {
                                                 this.todos = client.stores.todos;
                                                 this._updateList();
                                              },

                                              _add : function(item) {
                                                 this.todos.add(item);
                                                 this._updateList();
                                              },

                                             _delete : function(id) {
                                                 this.todos.remove(id);
                                                 this._updateList();
                                              },


Tuesday, January 17, 12                       _complete : function(id) {
mulberry.capability('PageTodos', {
            todos:
                                              requirements : {
              capabilities:
                                                 todoList : 'custom.TodoList',
              - name: PageTodos
                                                 todoForm : 'custom.TodoForm',
              screens:
                                                 todoTools : 'custom.TodoTools'
                - name: index
                                              },
                  regions:
                    - components:
                                              connects : [
                       - custom.TodoForm
                                                 [ 'todoForm', 'onAdd', '_add' ],
                    - className: list
                                                 [ 'todoList', 'onComplete', '_complete' ],
                      scrollable: true
                                                 [ 'todoList', 'onDelete', '_delete' ],
                      components:
                                                 [ 'todoTools', 'onCompleteAll', '_completeAll' ]
                       - custom.TodoList
                                              ],
                    - components:
                       - custom.TodoTools
                                              init : function() {
                                                 this.todos = client.stores.todos;
                                                 this._updateList();
                                              },

                                              _add : function(item) {
                                                 this.todos.add(item);
                                                 this._updateList();
                                              },

                                             _delete : function(id) {
                                                 this.todos.remove(id);
                                                 this._updateList();
                                              },


Tuesday, January 17, 12                       _complete : function(id) {
Tuesday, January 17, 12
mulberry serve




Tuesday, January 17, 12
mulberry test




Tuesday, January 17, 12
linkage
                              mulberry.toura.com
                             bit.ly/toura-mulberry
                          bit.ly/toura-mulberry-demos
                              slidesha.re/yiErGK




Tuesday, January 17, 12
@touradev @rmurphey


Tuesday, January 17, 12

More Related Content

What's hot (20)

PDF
Virtual Madness @ Etsy
Nishan Subedi
 
PPTX
jQuery Data Manipulate API - A source code dissecting journey
Huiyi Yan
 
KEY
jQuery Namespace Pattern
Diego Fleury
 
PDF
How Kris Writes Symfony Apps
Kris Wallsmith
 
PDF
How Kris Writes Symfony Apps
Kris Wallsmith
 
PDF
Matters of State
Kris Wallsmith
 
PDF
Your Entity, Your Code
Marco Vito Moscaritolo
 
PDF
Javascript in Plone
Steve McMahon
 
PDF
jQuery: Events, Animation, Ajax
Constantin Titarenko
 
PPTX
Taming that client side mess with Backbone.js
Jarod Ferguson
 
PDF
Learning jQuery in 30 minutes
Simon Willison
 
PDF
Write Less Do More
Remy Sharp
 
PDF
Delivering a Responsive UI
Rebecca Murphey
 
PPTX
Jquery plugin development
Faruk Hossen
 
PDF
Drupal Step-by-Step: How We Built Our Training Site, Part 1
Acquia
 
PDF
How kris-writes-symfony-apps-london
Kris Wallsmith
 
PDF
Design how your objects talk through mocking
Konstantin Kudryashov
 
PPT
jQuery 1.7 Events
dmethvin
 
PDF
Writing Maintainable JavaScript
Andrew Dupont
 
Virtual Madness @ Etsy
Nishan Subedi
 
jQuery Data Manipulate API - A source code dissecting journey
Huiyi Yan
 
jQuery Namespace Pattern
Diego Fleury
 
How Kris Writes Symfony Apps
Kris Wallsmith
 
How Kris Writes Symfony Apps
Kris Wallsmith
 
Matters of State
Kris Wallsmith
 
Your Entity, Your Code
Marco Vito Moscaritolo
 
Javascript in Plone
Steve McMahon
 
jQuery: Events, Animation, Ajax
Constantin Titarenko
 
Taming that client side mess with Backbone.js
Jarod Ferguson
 
Learning jQuery in 30 minutes
Simon Willison
 
Write Less Do More
Remy Sharp
 
Delivering a Responsive UI
Rebecca Murphey
 
Jquery plugin development
Faruk Hossen
 
Drupal Step-by-Step: How We Built Our Training Site, Part 1
Acquia
 
How kris-writes-symfony-apps-london
Kris Wallsmith
 
Design how your objects talk through mocking
Konstantin Kudryashov
 
jQuery 1.7 Events
dmethvin
 
Writing Maintainable JavaScript
Andrew Dupont
 

Viewers also liked (7)

PDF
Vision Pacific Group Ltd
sagarika24
 
PDF
Introducing Mulberry
Rebecca Murphey
 
PDF
DojoConf: Building Large Apps
Rebecca Murphey
 
PPTX
Rse sd oiseau dans pétrole
Jérôme Hoarau
 
PDF
Summa/Summon: Something something
Mads Villadsen
 
PDF
Ticer - What Is Summa
Mads Villadsen
 
PDF
Getting Started with Mulberry
Rebecca Murphey
 
Vision Pacific Group Ltd
sagarika24
 
Introducing Mulberry
Rebecca Murphey
 
DojoConf: Building Large Apps
Rebecca Murphey
 
Rse sd oiseau dans pétrole
Jérôme Hoarau
 
Summa/Summon: Something something
Mads Villadsen
 
Ticer - What Is Summa
Mads Villadsen
 
Getting Started with Mulberry
Rebecca Murphey
 
Ad

Similar to Mulberry: A Mobile App Development Toolkit (20)

PDF
mobl - model-driven engineering lecture
zefhemel
 
PDF
Little Opinions, Big Possibilities: The Tools and Patterns for Building Larg...
Brian Mann
 
PDF
mobl presentation @ IHomer
zefhemel
 
PDF
How to Build ToDo App with Vue 3 + TypeScript
Katy Slemon
 
PDF
The City Bars App with Sencha Touch 2
James Pearce
 
PDF
Simple React Todo List
Ritesh Chaudhari
 
PPTX
Final ppt
Ankit Gupta
 
PDF
mobl
Eelco Visser
 
KEY
Gwt and Xtend
Sven Efftinge
 
PDF
Backbone.js — Introduction to client-side JavaScript MVC
pootsbook
 
PDF
Ria with dojo
Tom Mahieu
 
PDF
Mattia Manzati - Real-World MobX Project Architecture - Codemotion Rome 2019
Codemotion
 
PPTX
Design Patterns for JavaScript Web Apps - JavaScript Conference 2012 - OPITZ ...
OPITZ CONSULTING Deutschland
 
PDF
Sketch Assignment - Task Management
Suraj Rao
 
PPTX
Owl: The New Odoo UI Framework
Odoo
 
PDF
Organizing Code with JavascriptMVC
Thomas Reynolds
 
PDF
Backbone - TDC 2011 Floripa
Rafael Felix da Silva
 
PPTX
2 years of angular: lessons learned
Dirk Luijk
 
PPTX
Writing HTML5 Web Apps using Backbone.js and GAE
Ron Reiter
 
PDF
Building Real-World Dojo Web Applications
Andrew Ferrier
 
mobl - model-driven engineering lecture
zefhemel
 
Little Opinions, Big Possibilities: The Tools and Patterns for Building Larg...
Brian Mann
 
mobl presentation @ IHomer
zefhemel
 
How to Build ToDo App with Vue 3 + TypeScript
Katy Slemon
 
The City Bars App with Sencha Touch 2
James Pearce
 
Simple React Todo List
Ritesh Chaudhari
 
Final ppt
Ankit Gupta
 
Gwt and Xtend
Sven Efftinge
 
Backbone.js — Introduction to client-side JavaScript MVC
pootsbook
 
Ria with dojo
Tom Mahieu
 
Mattia Manzati - Real-World MobX Project Architecture - Codemotion Rome 2019
Codemotion
 
Design Patterns for JavaScript Web Apps - JavaScript Conference 2012 - OPITZ ...
OPITZ CONSULTING Deutschland
 
Sketch Assignment - Task Management
Suraj Rao
 
Owl: The New Odoo UI Framework
Odoo
 
Organizing Code with JavascriptMVC
Thomas Reynolds
 
Backbone - TDC 2011 Floripa
Rafael Felix da Silva
 
2 years of angular: lessons learned
Dirk Luijk
 
Writing HTML5 Web Apps using Backbone.js and GAE
Ron Reiter
 
Building Real-World Dojo Web Applications
Andrew Ferrier
 
Ad

Recently uploaded (20)

PDF
Python basic programing language for automation
DanialHabibi2
 
PDF
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
PDF
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
PDF
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PPTX
UiPath Academic Alliance Educator Panels: Session 2 - Business Analyst Content
DianaGray10
 
PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
Python basic programing language for automation
DanialHabibi2
 
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
UiPath Academic Alliance Educator Panels: Session 2 - Business Analyst Content
DianaGray10
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 

Mulberry: A Mobile App Development Toolkit

  • 1. A Mobile App Development Toolkit Rebecca Murphey • BK.js • January 2012 Tuesday, January 17, 12
  • 5. Callback Cordova Tuesday, January 17, 12
  • 6. command line tools create the structure for an app, plus all the pieces you’ll need application framework javascript, html templates, css via sass builder generates production-ready builds for Android, iOS Tuesday, January 17, 12
  • 7. bit.ly/toura-mulberry bit.ly/toura-mulberry-demos Tuesday, January 17, 12
  • 10. $('#btn-co-complete').live('click', function() { jobCompleted = true; $.mobile.changePage('#page-clockout-deficiency', {changeHash: false}); }); $('#btn-co-nocomplete').live('click', function() { jobCompleted = false; $.mobile.changePage('#page-clockout-deficiency', {changeHash: false}); }); $('#btn-co-nodef').live('click', function() { clockOut(activeJob, { completed:jobCompleted }, DW_JOB_COMPLETED); }); $('#btn-co-otherdef').live('click', function() { $.mobile.changePage('#page-clockout-redtag', {changeHash: false}); }); $('#btn-co-redtag').live('click', function() { clockOut(activeJob, { completed:jobCompleted, redTag:true }, DW_JOB_FOLLOWUP); }); $('#btn-co-noredtag').live('click', function() { $('#page-clockout-resolve').page(); $.mobile.changePage('#page-clockout-resolve', {changeHash: false}); }); $('#btn-clockout-resolve').live('click', function() { switch ($('#page-clockout-resolve :checked').val()) { Tuesday, January 17, 12 case 'return':
  • 12. Mulberry apps are architected feels like We can write JavaScript thatfor change.this. Tuesday, January 17, 12
  • 13. command line interface create the structure for an app, plus all the pieces you’ll need application framework javascript, html templates, css via sass builder generates production-ready builds for Android, iOS Tuesday, January 17, 12
  • 16. routes manage high-level application state components receive and render data, and react to user input capabilities provide data to components, and broker communications between them page de nitions reusable groupings of components and capabilities stores persist data on the device, make that data query-able, and return model instances Tuesday, January 17, 12
  • 17. routes manage high-level application state Tuesday, January 17, 12
  • 18. $YOURAPP/javascript/routes.js mulberry.page('/todos', { name : 'Todos', pageDef : 'todos' }, true); mulberry.page('/completed', { name : 'Completed', pageDef : 'completed' }); #/todos #/completed Tuesday, January 17, 12
  • 19. stores persist data on the device, make that data query-able, and return model instances Tuesday, January 17, 12
  • 20. $YOURAPP/javascript/stores/todos.js mulberry.store('todos', { model : 'Todo', finish : function(id) { this.invoke(id, 'finish'); }, unfinish : function(id) { this.invoke(id, 'unfinish'); } }); Tuesday, January 17, 12
  • 21. page de nitions reusable groupings of components and capabilities Tuesday, January 17, 12
  • 22. todos: capabilities: - name: PageTodos screens: - name: index regions: - components: - custom.TodoForm - className: list scrollable: true components: - custom.TodoList - components: - custom.TodoTools NB: You can define this with JavaScript, too, using toura.pageDef(‘todos’, { ... }). Tuesday, January 17, 12
  • 23. components receive and render data, and react to user input Tuesday, January 17, 12
  • 24. $YOURAPP/javascript/components/TodoForm.js mulberry.component('TodoForm', { componentTemplate : dojo.cache('client.components', 'TodoForm/TodoForm.haml'), init : function() { this.connect(this.domNode, 'submit', function(e) { e.preventDefault(); var description = dojo.trim(this.descriptionInput.value), item; if (!description) { return; } item = { description : description }; this.domNode.reset(); this.onAdd(item); }); }, onAdd : function(item) { } }); Tuesday, January 17, 12
  • 25. $YOURAPP/javascript/components/TodoForm/TodoForm.haml %form.component.todo-form %input{ placeholder : 'New todo', dojoAttachPoint : 'descriptionInput' } %button{ dojoAttachPoint : 'saveButton' } Add Tuesday, January 17, 12
  • 26. $YOURAPP/javascript/components/TodoForm.js mulberry.component('TodoForm', { componentTemplate : dojo.cache('client.components', 'TodoForm/TodoForm.haml'), init : function() { this.connect(this.domNode, 'submit', function(e) { e.preventDefault(); var description = dojo.trim(this.descriptionInput.value), item; if (!description) { return; } item = { description : description }; this.domNode.reset(); this.onAdd(item); }); }, onAdd : function(item) { } }); Tuesday, January 17, 12
  • 27. capabilities provide data to components, and broker communications between them Tuesday, January 17, 12
  • 28. mulberry.capability('PageTodos', { todos: requirements : { capabilities: todoList : 'custom.TodoList', - name: PageTodos todoForm : 'custom.TodoForm', screens: todoTools : 'custom.TodoTools' - name: index }, regions: - components: connects : [ - custom.TodoForm [ 'todoForm', 'onAdd', '_add' ], - className: list [ 'todoList', 'onComplete', '_complete' ], scrollable: true [ 'todoList', 'onDelete', '_delete' ], components: [ 'todoTools', 'onCompleteAll', '_completeAll' ] - custom.TodoList ], - components: - custom.TodoTools init : function() { this.todos = client.stores.todos; this._updateList(); }, _add : function(item) { this.todos.add(item); this._updateList(); }, _delete : function(id) { this.todos.remove(id); this._updateList(); }, Tuesday, January 17, 12 _complete : function(id) {
  • 29. mulberry.capability('PageTodos', { todos: requirements : { capabilities: todoList : 'custom.TodoList', - name: PageTodos todoForm : 'custom.TodoForm', screens: todoTools : 'custom.TodoTools' - name: index }, regions: - components: connects : [ - custom.TodoForm [ 'todoForm', 'onAdd', '_add' ], - className: list [ 'todoList', 'onComplete', '_complete' ], scrollable: true [ 'todoList', 'onDelete', '_delete' ], components: [ 'todoTools', 'onCompleteAll', '_completeAll' ] - custom.TodoList ], - components: - custom.TodoTools init : function() { this.todos = client.stores.todos; this._updateList(); }, _add : function(item) { this.todos.add(item); this._updateList(); }, _delete : function(id) { this.todos.remove(id); this._updateList(); }, Tuesday, January 17, 12 _complete : function(id) {
  • 30. mulberry.capability('PageTodos', { todos: requirements : { capabilities: todoList : 'custom.TodoList', - name: PageTodos todoForm : 'custom.TodoForm', screens: todoTools : 'custom.TodoTools' - name: index }, regions: - components: connects : [ - custom.TodoForm [ 'todoForm', 'onAdd', '_add' ], - className: list [ 'todoList', 'onComplete', '_complete' ], scrollable: true [ 'todoList', 'onDelete', '_delete' ], components: [ 'todoTools', 'onCompleteAll', '_completeAll' ] - custom.TodoList ], - components: - custom.TodoTools init : function() { this.todos = client.stores.todos; this._updateList(); }, _add : function(item) { this.todos.add(item); this._updateList(); }, _delete : function(id) { this.todos.remove(id); this._updateList(); }, Tuesday, January 17, 12 _complete : function(id) {
  • 34. linkage mulberry.toura.com bit.ly/toura-mulberry bit.ly/toura-mulberry-demos slidesha.re/yiErGK Tuesday, January 17, 12