SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
Mojito training
Keshavaprasad B S
● What is Mojito?
● Mojito Architecture
● Installation & Setup
● Create a simple weather app
○ Understand application components
○ Deep dive into few of them
● Create a composite mojit
● Lazy Mojit
Agenda
● Mojito is a node module and hence benefits from the speed and
scalability on Node.js. It uses express package of Node.js.
● MVC framework built on YUI3
● Mojito offers:
○ Library for internationalization & localization
○ Device specific presentation
○ Ability to run the same code on either client or the server
○ Integrated unit testing
What is Mojito?
● Designed with the goal of running
in multiple runtime environments
and supporting online and offline
experiences.
○ Mobile browser: supports
HTML-based online
experience; may also support
an HTML5-based offline
experience
○ Desktop browser: assumed to
be always connected; supports
HTML-based online
experience
○ Native client: deployed as
packaged applications,
wrapping native chrome
around an HTML5-based
experience
Mojito architecture
1. Download node from http://nodejs.org.
2. Do npm install mojito
3. alias mojito=~/node_modules/mojito/bin/mojito
4. mojito version
Installation and setup
● Basic unit of composition and reuse in a Mojito application
● Why Mojit? : Module + Widget = Mojit
● Path: <app_name>/mojits/<mojit_name>
● Mojit components:
○ Models
○ Controller
○ Binders
○ View files
● Example: https://github.com/kbsbng/mojito-
examples/tree/master/HelloWorld/mojits/helloWorld
Application components: mojit
● Represent business logic entities and contain code that accesses
and persists data
● Can be shared across mojits
● Path: <app_name>/mojits/<mojit_name>/models.
● Naming convention:
○ For file name: {model_name}.{affinity}.js, where affinity is
server, client or common. For example, flickr.server.js
○ For the YUI module name: {mojit_name}Model
{Model_name}. For example, in photos/models/flickr.
server.js, use the YUI module name photosModelFlickr.
○ For the default model.server.js, use the YUI module name
{mojit_name}Model.
● Example: https://github.com/kbsbng/mojito-
examples/blob/master/HelloWorld/mojits/helloWorld/models/foo.
server.js
Application components: model
● Path: <app_name>/mojits/<mojit_name>/controller.
server.js.
● Naming convention:
○ For the file name: controller.{affinity}.js, where
affinity is common, server, or client.
○ For the YUI module name: use the mojit name.
● Example: https://github.com/kbsbng/mojito-
examples/blob/master/HelloWorld/mojits/helloWorld/controller.
server.js
● Controller <=> Model communication:
○ through ActionContext: ac.models.get
('{model_name}').{model_function}
● Passing data to the view.
○ through ActionContext: ac.done(data).
Application components: controller
● Path:
<app_name>/mojits/<mojit_name>/views/<view_file>
● Naming convention: {controller_function}.[{selector}].
{rendering_engine}.html.
Sample names: index.hb.html, photos.iphone.jade.html,
landing.android.ejs.html.
● Currently supporting templating engines:
○ Mustache
○ Handlebars (default).
● You can fairly easily add support to other templating engines like
jade and ejs.
● Example: https://github.com/kbsbng/mojito-
examples/blob/master/HelloWorld/mojits/helloWorld/binders/index.js
Application components: View
● Runs only on the client side
● Binders can
○ Attach event handlers to the mojit's DOM node
○ Communicate with other mojits on the page
○ Execute actions on the mojit that the binder is attached to
○ Refresh the mojit
● Example: https://github.com/kbsbng/mojito-
examples/blob/master/SimpleWeatherApp/mojits/Weather/binders/i
ndex.js
Application components: binder
Check the code at https://github.com/kbsbng/mojito-
examples/tree/master/SimpleWeatherApp. It:
● Creates a simple weather app to display temperature of Bangalore
by doing YQL query: "select * from weather.forecast where
woeid=2295420"
● Then, see how to add a forecast action to this module to show the
forecast.
Create a simple weather app
● https://github.com/kbsbng/mojito-
examples/blob/master/SimpleWeatherApp/routes.json
Deep dive: routing
● Helpers:
○ For mojit instance, use ac.helpers.set in controller. Examples:
■ https://github.com/kbsbng/mojito-
examples/blob/master/DemoHandlebarHelpers/mojits/Dem
o/controller.server.js
■ https://github.com/kbsbng/mojito-
examples/blob/master/DemoHandlebarHelpers/mojits/Dem
o/views/index.hb.html
○ For global use, use ac.helpers.expose in controller.
● Mojito supplied data:
○ {{mojit_view_id}}
○ {{mojit_assets}} - assets dir of the mojit
Deep dive: template and View Engine
● Example: https://github.com/kbsbng/mojito-
examples/tree/master/SimpleWeatherApp/mojits/Weather
Deep dive: Controller actions, action <=>
view mapping
● Using mojitProxy.invoke:
○ https://github.com/kbsbng/mojito-
examples/blob/master/SimpleWeatherApp/mojits/Weather/binders/index.js
Deep dive: Binder tunneling
● mojito-params-addon: http://developer.yahoo.
com/cocktails/mojito/api/classes/Params.common.html
● mojito-cookies-addon: http://developer.yahoo.
com/cocktails/mojito/api/classes/Cookie.server.html
● mojito-url-addon: http://developer.yahoo.
com/cocktails/mojito/api/classes/Url.common.html
● mojito-assets-addon: http://developer.yahoo.
com/cocktails/mojito/api/classes/Assets.common.html
● mojito-composite-addon: http://developer.yahoo.
com/cocktails/mojito/api/classes/Composite.common.html
● mojito-config-addon: http://developer.yahoo.
com/cocktails/mojito/api/classes/Config.common.html
Built-in components: Addons
● Composite mojits
○ https://github.com/kbsbng/mojito-
examples/blob/master/DemoCompositeMojitApp/application.
json
Built-in components: Mojits:
HTMLFrameMojit
● To use lazy mojit, app should:
○ create a top-level mojit instance of type HTMLFrameMojit
○ deploy the mojit instance of type HTMLFrameMojit to the client
("deploy": true)
○ create a container mojit that has children mojit instances
("children": { ... })
○ defer the dispatch of the mojit instance that will be lazily loaded
("defer": true)
Built-in components: Mojits: LazyMojit
● Defaults.json:
○ defaults for each mojit.
○ Can be overridden by parent mojit
○ Configurable based on context
● Definition.json:
○ metadata for a mojit
○ Configurable based on context
Configuration: application.json, defaults.
json, definition.json
● Launch an app using a context using --context "environment:
<context_name>"
Configuration: launch an app using a
context
● yui.config.debug (default: true)
● yui.config.logLevel (default: debug)
● yui.config.logLevelOrder: (default: ['debug', 'mojito', 'info', 'warn',
'error', 'none'] )
Configuration: logging
● Path:
○ App level: {application_name}/assets
○ Mojit level: {application_name}/mojits/{mojit_name}/assets
● Accessing assets:
○ /static/{application_name}/assets/{asset_file}
○ /static/{mojit_name}/assets/{asset_file}
● Using assets addon
Assets
● http://developer.yahoo.com/cocktails/mojito/docs/
Useful links
Thanks!

Weitere ähnliche Inhalte

Ähnlich wie Mojito training: Create a simple weather app

GeoServer Developers Workshop
GeoServer Developers WorkshopGeoServer Developers Workshop
GeoServer Developers WorkshopJody Garnett
 
Using PHP with IBM Bluemix
Using PHP with IBM BluemixUsing PHP with IBM Bluemix
Using PHP with IBM Bluemixvvaswani
 
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScriptENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScriptHoracio Gonzalez
 
Flutter workshop @ bang saen 2020
Flutter workshop @ bang saen 2020Flutter workshop @ bang saen 2020
Flutter workshop @ bang saen 2020Anuchit Chalothorn
 
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScriptENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScriptHoracio Gonzalez
 
EuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears TrainingEuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears TrainingAlessandro Molina
 
[JogjaJS] Single Page Application nganggo Angular.js
[JogjaJS] Single Page Application nganggo Angular.js [JogjaJS] Single Page Application nganggo Angular.js
[JogjaJS] Single Page Application nganggo Angular.js Yanuar W
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to DjangoAhmed Salama
 
Improving Chromium's code health: Onion Soup and beyond (BlinkOn 11)
Improving Chromium's code health: Onion Soup and beyond (BlinkOn 11)Improving Chromium's code health: Onion Soup and beyond (BlinkOn 11)
Improving Chromium's code health: Onion Soup and beyond (BlinkOn 11)Igalia
 
Ahmadabad mule soft_meetup_6march2021_azure_CICD
Ahmadabad mule soft_meetup_6march2021_azure_CICDAhmadabad mule soft_meetup_6march2021_azure_CICD
Ahmadabad mule soft_meetup_6march2021_azure_CICDShekh Muenuddeen
 
Integrating Puppet and Gitolite for sysadmins cooperations
Integrating Puppet and Gitolite for sysadmins cooperationsIntegrating Puppet and Gitolite for sysadmins cooperations
Integrating Puppet and Gitolite for sysadmins cooperationsLuca Mazzaferro
 
Using GIT for Everyone
Using GIT for EveryoneUsing GIT for Everyone
Using GIT for EveryoneGLC Networks
 
CI CD Daridabad MuleSoft meetup
CI CD Daridabad MuleSoft meetupCI CD Daridabad MuleSoft meetup
CI CD Daridabad MuleSoft meetupAmit Singh
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to DjangoKnoldus Inc.
 
GT-Mconf - Transfer of Technology Course
GT-Mconf - Transfer of Technology CourseGT-Mconf - Transfer of Technology Course
GT-Mconf - Transfer of Technology Coursemconf
 
Modern Web Applications Utilizing HTML5 (Dev Con TLV 06-2013)
Modern Web Applications Utilizing HTML5 (Dev Con TLV 06-2013)Modern Web Applications Utilizing HTML5 (Dev Con TLV 06-2013)
Modern Web Applications Utilizing HTML5 (Dev Con TLV 06-2013)Ido Green
 
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...David Amend
 

Ähnlich wie Mojito training: Create a simple weather app (20)

GeoServer Developers Workshop
GeoServer Developers WorkshopGeoServer Developers Workshop
GeoServer Developers Workshop
 
Using PHP with IBM Bluemix
Using PHP with IBM BluemixUsing PHP with IBM Bluemix
Using PHP with IBM Bluemix
 
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScriptENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
 
Flutter workshop @ bang saen 2020
Flutter workshop @ bang saen 2020Flutter workshop @ bang saen 2020
Flutter workshop @ bang saen 2020
 
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScriptENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
 
EuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears TrainingEuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears Training
 
Code-Hub
Code-HubCode-Hub
Code-Hub
 
[JogjaJS] Single Page Application nganggo Angular.js
[JogjaJS] Single Page Application nganggo Angular.js [JogjaJS] Single Page Application nganggo Angular.js
[JogjaJS] Single Page Application nganggo Angular.js
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to Django
 
Improving Chromium's code health: Onion Soup and beyond (BlinkOn 11)
Improving Chromium's code health: Onion Soup and beyond (BlinkOn 11)Improving Chromium's code health: Onion Soup and beyond (BlinkOn 11)
Improving Chromium's code health: Onion Soup and beyond (BlinkOn 11)
 
CI/CD with Bitbucket pipelines
CI/CD with Bitbucket pipelinesCI/CD with Bitbucket pipelines
CI/CD with Bitbucket pipelines
 
Ahmadabad mule soft_meetup_6march2021_azure_CICD
Ahmadabad mule soft_meetup_6march2021_azure_CICDAhmadabad mule soft_meetup_6march2021_azure_CICD
Ahmadabad mule soft_meetup_6march2021_azure_CICD
 
Integrating Puppet and Gitolite for sysadmins cooperations
Integrating Puppet and Gitolite for sysadmins cooperationsIntegrating Puppet and Gitolite for sysadmins cooperations
Integrating Puppet and Gitolite for sysadmins cooperations
 
Nicolas Embleton, Advanced Angular JS
Nicolas Embleton, Advanced Angular JSNicolas Embleton, Advanced Angular JS
Nicolas Embleton, Advanced Angular JS
 
Using GIT for Everyone
Using GIT for EveryoneUsing GIT for Everyone
Using GIT for Everyone
 
CI CD Daridabad MuleSoft meetup
CI CD Daridabad MuleSoft meetupCI CD Daridabad MuleSoft meetup
CI CD Daridabad MuleSoft meetup
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to Django
 
GT-Mconf - Transfer of Technology Course
GT-Mconf - Transfer of Technology CourseGT-Mconf - Transfer of Technology Course
GT-Mconf - Transfer of Technology Course
 
Modern Web Applications Utilizing HTML5 (Dev Con TLV 06-2013)
Modern Web Applications Utilizing HTML5 (Dev Con TLV 06-2013)Modern Web Applications Utilizing HTML5 (Dev Con TLV 06-2013)
Modern Web Applications Utilizing HTML5 (Dev Con TLV 06-2013)
 
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
 

Kürzlich hochgeladen

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 

Kürzlich hochgeladen (20)

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 

Mojito training: Create a simple weather app

  • 2. ● What is Mojito? ● Mojito Architecture ● Installation & Setup ● Create a simple weather app ○ Understand application components ○ Deep dive into few of them ● Create a composite mojit ● Lazy Mojit Agenda
  • 3. ● Mojito is a node module and hence benefits from the speed and scalability on Node.js. It uses express package of Node.js. ● MVC framework built on YUI3 ● Mojito offers: ○ Library for internationalization & localization ○ Device specific presentation ○ Ability to run the same code on either client or the server ○ Integrated unit testing What is Mojito?
  • 4. ● Designed with the goal of running in multiple runtime environments and supporting online and offline experiences. ○ Mobile browser: supports HTML-based online experience; may also support an HTML5-based offline experience ○ Desktop browser: assumed to be always connected; supports HTML-based online experience ○ Native client: deployed as packaged applications, wrapping native chrome around an HTML5-based experience Mojito architecture
  • 5. 1. Download node from http://nodejs.org. 2. Do npm install mojito 3. alias mojito=~/node_modules/mojito/bin/mojito 4. mojito version Installation and setup
  • 6. ● Basic unit of composition and reuse in a Mojito application ● Why Mojit? : Module + Widget = Mojit ● Path: <app_name>/mojits/<mojit_name> ● Mojit components: ○ Models ○ Controller ○ Binders ○ View files ● Example: https://github.com/kbsbng/mojito- examples/tree/master/HelloWorld/mojits/helloWorld Application components: mojit
  • 7. ● Represent business logic entities and contain code that accesses and persists data ● Can be shared across mojits ● Path: <app_name>/mojits/<mojit_name>/models. ● Naming convention: ○ For file name: {model_name}.{affinity}.js, where affinity is server, client or common. For example, flickr.server.js ○ For the YUI module name: {mojit_name}Model {Model_name}. For example, in photos/models/flickr. server.js, use the YUI module name photosModelFlickr. ○ For the default model.server.js, use the YUI module name {mojit_name}Model. ● Example: https://github.com/kbsbng/mojito- examples/blob/master/HelloWorld/mojits/helloWorld/models/foo. server.js Application components: model
  • 8. ● Path: <app_name>/mojits/<mojit_name>/controller. server.js. ● Naming convention: ○ For the file name: controller.{affinity}.js, where affinity is common, server, or client. ○ For the YUI module name: use the mojit name. ● Example: https://github.com/kbsbng/mojito- examples/blob/master/HelloWorld/mojits/helloWorld/controller. server.js ● Controller <=> Model communication: ○ through ActionContext: ac.models.get ('{model_name}').{model_function} ● Passing data to the view. ○ through ActionContext: ac.done(data). Application components: controller
  • 9. ● Path: <app_name>/mojits/<mojit_name>/views/<view_file> ● Naming convention: {controller_function}.[{selector}]. {rendering_engine}.html. Sample names: index.hb.html, photos.iphone.jade.html, landing.android.ejs.html. ● Currently supporting templating engines: ○ Mustache ○ Handlebars (default). ● You can fairly easily add support to other templating engines like jade and ejs. ● Example: https://github.com/kbsbng/mojito- examples/blob/master/HelloWorld/mojits/helloWorld/binders/index.js Application components: View
  • 10. ● Runs only on the client side ● Binders can ○ Attach event handlers to the mojit's DOM node ○ Communicate with other mojits on the page ○ Execute actions on the mojit that the binder is attached to ○ Refresh the mojit ● Example: https://github.com/kbsbng/mojito- examples/blob/master/SimpleWeatherApp/mojits/Weather/binders/i ndex.js Application components: binder
  • 11. Check the code at https://github.com/kbsbng/mojito- examples/tree/master/SimpleWeatherApp. It: ● Creates a simple weather app to display temperature of Bangalore by doing YQL query: "select * from weather.forecast where woeid=2295420" ● Then, see how to add a forecast action to this module to show the forecast. Create a simple weather app
  • 13. ● Helpers: ○ For mojit instance, use ac.helpers.set in controller. Examples: ■ https://github.com/kbsbng/mojito- examples/blob/master/DemoHandlebarHelpers/mojits/Dem o/controller.server.js ■ https://github.com/kbsbng/mojito- examples/blob/master/DemoHandlebarHelpers/mojits/Dem o/views/index.hb.html ○ For global use, use ac.helpers.expose in controller. ● Mojito supplied data: ○ {{mojit_view_id}} ○ {{mojit_assets}} - assets dir of the mojit Deep dive: template and View Engine
  • 15. ● Using mojitProxy.invoke: ○ https://github.com/kbsbng/mojito- examples/blob/master/SimpleWeatherApp/mojits/Weather/binders/index.js Deep dive: Binder tunneling
  • 16. ● mojito-params-addon: http://developer.yahoo. com/cocktails/mojito/api/classes/Params.common.html ● mojito-cookies-addon: http://developer.yahoo. com/cocktails/mojito/api/classes/Cookie.server.html ● mojito-url-addon: http://developer.yahoo. com/cocktails/mojito/api/classes/Url.common.html ● mojito-assets-addon: http://developer.yahoo. com/cocktails/mojito/api/classes/Assets.common.html ● mojito-composite-addon: http://developer.yahoo. com/cocktails/mojito/api/classes/Composite.common.html ● mojito-config-addon: http://developer.yahoo. com/cocktails/mojito/api/classes/Config.common.html Built-in components: Addons
  • 17. ● Composite mojits ○ https://github.com/kbsbng/mojito- examples/blob/master/DemoCompositeMojitApp/application. json Built-in components: Mojits: HTMLFrameMojit
  • 18. ● To use lazy mojit, app should: ○ create a top-level mojit instance of type HTMLFrameMojit ○ deploy the mojit instance of type HTMLFrameMojit to the client ("deploy": true) ○ create a container mojit that has children mojit instances ("children": { ... }) ○ defer the dispatch of the mojit instance that will be lazily loaded ("defer": true) Built-in components: Mojits: LazyMojit
  • 19. ● Defaults.json: ○ defaults for each mojit. ○ Can be overridden by parent mojit ○ Configurable based on context ● Definition.json: ○ metadata for a mojit ○ Configurable based on context Configuration: application.json, defaults. json, definition.json
  • 20. ● Launch an app using a context using --context "environment: <context_name>" Configuration: launch an app using a context
  • 21. ● yui.config.debug (default: true) ● yui.config.logLevel (default: debug) ● yui.config.logLevelOrder: (default: ['debug', 'mojito', 'info', 'warn', 'error', 'none'] ) Configuration: logging
  • 22. ● Path: ○ App level: {application_name}/assets ○ Mojit level: {application_name}/mojits/{mojit_name}/assets ● Accessing assets: ○ /static/{application_name}/assets/{asset_file} ○ /static/{mojit_name}/assets/{asset_file} ● Using assets addon Assets