SlideShare una empresa de Scribd logo
1 de 25
Descargar para leer sin conexión
Handlebars.js
         Ivano Malavolta
    ivano.malavolta@univaq.it
http://www.di.univaq.it/malavolta
Roadmap

• Why Handlebars
• Handlebars Basics
• Usage with Require.JS
Why Handlebars

We are building apps, not web sites

We want to separate presentation from logic

We don’t want to put any HTML element into
  Javascript code
What we want to avoid




Imagine yourself trying to change how a movie should
  be rendered in your app...
Roadmap

• Why Handlebars
• Handlebars Basics
• Usage with Require.JS
Example of Template
<div class=“userEntry">
  <h1>
     {{username}}
  </h1>
  <img>                   A handlebars expression
     {{profilePic}}       is a {{, some contents,
  </img>                  followed by a }}
  <div class=“status“>
     {{status}}
  </div>
</div>
Values Escaping
Handlebars HTML-escapes all the values returned by
  a {{expression}}

If you don't want Handlebars to escape a value, use
  the "triple-stash“

<div class=“userEntry">
  <h1>{{username}}</h1>
  <div class=“status“>
     {{{status}}}
  </div>
</div>
Template Context

A context is a Javascript object used to populate a
  template

   var context = {
     username: “Ivano“,
     profilePic: “./images/pic.png“,
     status: “feeling good”
   };
Compiling a Template
Templates are defined within a <script> tag
or in external files


<script id=“user-template"
 type="text/x-handlebars-template">

  // template content

</script>
Compiling a Template

Handlebars.compile is used to compile a template

var source = $("#user-template").html();
var template = Handlebars.compile(source);


Compiling = obtaining a JS object representing the
  template
Obtaining the final HTML code

You have to execute a template with a context in order
  to get its corresponding HTML code

var context = {username: “Ivano“,
               status: “feeling good” };

var html = template(context);
         <div class=“userEntry">
           <h1>Ivano<h1>
           <div class=“status“>
             feeling good
           </div>
         </div>
Expressions

The simplest expression is a simple identifier

  <h1>{{username}}</h1>




This expression means
  "look up the title property in the current context"
Expressions

Handlebars expressions can also be dot-separated
  paths

  <h1>{{user.username}}</h1>




This expression means
  "look up the user property in the current context,
  then look up the username property in the result"
Helpers
Helpers are Javascript functions that return HTML code

Handlebars.registerHelper(‘test‘, function(user) {
    return new Handlebars.SafeString(
      "<a href='" + user.name + "'>" +
            user.surname + "</a>"
  );
});

You should return a Handlebars SafeString if you don't
  want it to be escaped by default
Calling Helpers
A Handlebars helper call is a simple identifier,
  followed by zero or more parameters

Each parameter is a Handlebars expression

es.
  {{{ test user }}}


In this case, link is the name of a Handlebars helper,
  and user is a parameter to the helper
Built-in Helpers

  With
  It shifts the context for a section of a template

              { title: "My first post!",
                 author: { firstName: "Charles", lastName: "Jolley" }
               }




<div class="entry“>
                                                        <div class="entry“>
<h1>{{title}}</h1>
                                                        <h1>My first post!</h1>
{{#with author}}
                                                        <h2>By Charles Jolley</h2>
<h2>By {{firstName}} {{lastName}}</h2>
                                                        </div>
{{/with}}
</div>
Built-in Helpers

Each
To iterate over a list
Inside the block, you can use this to reference the
  element being iterated
{ people: [ "Yehuda Katz", "Alan Johnson", "Charles Jolley" ] }


   <ul class="people_list">                <ul class="people_list">
    {{#each people}}                        <li>Yehuda Katz</li>
    <li>{{this}}</li>                       <li>Alan Johnson</li>
   {{/each}}                                <li>Charles Jolley</li>
    </ul>                                  </ul>
Built-in Helpers

If - Else
To conditionally render a block
It will render the block if its argument is not equal to
  false, undefined, null, []
<div class="entry">
{{#if author}}                             The unless
<h1>{{firstName}} {{lastName}}</h1>       helper is the
{{else}}                                  inverse of if
<h1>Unknown Author</h1>
{{/if}}
</div>
Handlebars Recall

Each Template can contains Expressions and Helpers
  operating on them

You can define your own Helpers that operate on
  expressions, they return HTML code

A template can be (pre)-compiled and must be
  executed with a Context in order to return the final
  HTML fragment
Roadmap

• Why Handlebars
• Handlebars Basics
• Usage with Require.JS
Usage with Require.JS

There is a RequireJS plugin that allows you to

• Automatically precompile all your templates
• Manage templates dependencies with RequireJS
• Refer to templates directly within your JS code

Reference:
https://github.com/SlexAxton/require-handlebars-plugin
Library Usage

Include the hbs.js plugin and the Handlebars.js
  file in the same directory of your require.js

www/js/lib/require.js
www/js/lib/hbs.js
www/js/lib/Handlebars.js
www/templates/Hi.hbs
Template Definition


// in file yourApp/templates/Hi.hbs
<div class=“test">
  Hi, my name is {{ name }}, nice to meet you!
</div>
Template Execution
In your JS files now you can require and execute your
  templates

es.
require(['hbs!../templates/Hi'], function ( tmplHi ) {
  $(‘#block’).html(tmplHi({name: “Ivano"}));
 });




<div class=“test">
  Hi, my name is Ivano, nice to meet you!
</div>
References


handlebarsjs.com

Más contenido relacionado

La actualidad más candente

Templates in C++
Templates in C++Templates in C++
Templates in C++
Tech_MX
 
Bash shell
Bash shellBash shell
Bash shell
xylas121
 

La actualidad más candente (20)

Templates in C++
Templates in C++Templates in C++
Templates in C++
 
Sorting arrays in PHP
Sorting arrays in PHPSorting arrays in PHP
Sorting arrays in PHP
 
Control structures in C++ Programming Language
Control structures in C++ Programming LanguageControl structures in C++ Programming Language
Control structures in C++ Programming Language
 
Advanced javascript
Advanced javascriptAdvanced javascript
Advanced javascript
 
Shell scripting
Shell scriptingShell scripting
Shell scripting
 
Java: Objects and Object References
Java: Objects and Object ReferencesJava: Objects and Object References
Java: Objects and Object References
 
Java abstract class & abstract methods
Java abstract class & abstract methodsJava abstract class & abstract methods
Java abstract class & abstract methods
 
Tokens expressionsin C++
Tokens expressionsin C++Tokens expressionsin C++
Tokens expressionsin C++
 
Chapter 02: Classes Objects and Methods Java by Tushar B Kute
Chapter 02: Classes Objects and Methods Java by Tushar B KuteChapter 02: Classes Objects and Methods Java by Tushar B Kute
Chapter 02: Classes Objects and Methods Java by Tushar B Kute
 
16 virtual function
16 virtual function16 virtual function
16 virtual function
 
OOPS IN C++
OOPS IN C++OOPS IN C++
OOPS IN C++
 
Bash shell
Bash shellBash shell
Bash shell
 
Input output statement
Input output statementInput output statement
Input output statement
 
Vectors in Java
Vectors in JavaVectors in Java
Vectors in Java
 
Structures in c++
Structures in c++Structures in c++
Structures in c++
 
File handling in c++
File handling in c++File handling in c++
File handling in c++
 
Class 10
Class 10Class 10
Class 10
 
Files and streams
Files and streamsFiles and streams
Files and streams
 
Core java concepts
Core java  conceptsCore java  concepts
Core java concepts
 
Java oops PPT
Java oops PPTJava oops PPT
Java oops PPT
 

Destacado

In Pursuit of the Holy Grail: Building Isomorphic JavaScript Apps
In Pursuit of the Holy Grail: Building Isomorphic JavaScript AppsIn Pursuit of the Holy Grail: Building Isomorphic JavaScript Apps
In Pursuit of the Holy Grail: Building Isomorphic JavaScript Apps
Spike Brehm
 

Destacado (6)

Introduction to javascript templating using handlebars.js
Introduction to javascript templating using handlebars.jsIntroduction to javascript templating using handlebars.js
Introduction to javascript templating using handlebars.js
 
Handlebars
HandlebarsHandlebars
Handlebars
 
AngularJS with RequireJS
AngularJS with RequireJSAngularJS with RequireJS
AngularJS with RequireJS
 
In Pursuit of the Holy Grail: Building Isomorphic JavaScript Apps
In Pursuit of the Holy Grail: Building Isomorphic JavaScript AppsIn Pursuit of the Holy Grail: Building Isomorphic JavaScript Apps
In Pursuit of the Holy Grail: Building Isomorphic JavaScript Apps
 
RequireJS & Handlebars
RequireJS & HandlebarsRequireJS & Handlebars
RequireJS & Handlebars
 
Single Page Applications with AngularJS 2.0
Single Page Applications with AngularJS 2.0 Single Page Applications with AngularJS 2.0
Single Page Applications with AngularJS 2.0
 

Similar a Handlebars.js

HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2
James Pearce
 
Rich Internet Applications con JavaFX e NetBeans
Rich Internet Applications  con JavaFX e NetBeans Rich Internet Applications  con JavaFX e NetBeans
Rich Internet Applications con JavaFX e NetBeans
Fabrizio Giudici
 
HTL(Sightly) - All you need to know
HTL(Sightly) - All you need to knowHTL(Sightly) - All you need to know
HTL(Sightly) - All you need to know
Prabhdeep Singh
 

Similar a Handlebars.js (20)

Workshop 8: Templating: Handlebars, DustJS
Workshop 8: Templating: Handlebars, DustJSWorkshop 8: Templating: Handlebars, DustJS
Workshop 8: Templating: Handlebars, DustJS
 
jQuery
jQueryjQuery
jQuery
 
[2015/2016] Require JS and Handlebars JS
[2015/2016] Require JS and Handlebars JS[2015/2016] Require JS and Handlebars JS
[2015/2016] Require JS and Handlebars JS
 
Handlebars & Require JS
Handlebars  & Require JSHandlebars  & Require JS
Handlebars & Require JS
 
Html / CSS Presentation
Html / CSS PresentationHtml / CSS Presentation
Html / CSS Presentation
 
Handlebars and Require.js
Handlebars and Require.jsHandlebars and Require.js
Handlebars and Require.js
 
Client Side rendering Not so Easy
Client Side rendering Not so EasyClient Side rendering Not so Easy
Client Side rendering Not so Easy
 
Introduction to JavaScript Basics.
Introduction to JavaScript Basics.Introduction to JavaScript Basics.
Introduction to JavaScript Basics.
 
Basics of Java Script (JS)
Basics of Java Script (JS)Basics of Java Script (JS)
Basics of Java Script (JS)
 
FYBSC IT Web Programming Unit III Javascript
FYBSC IT Web Programming Unit III JavascriptFYBSC IT Web Programming Unit III Javascript
FYBSC IT Web Programming Unit III Javascript
 
Java script
Java scriptJava script
Java script
 
Presentation
PresentationPresentation
Presentation
 
HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2
 
jQuery
jQueryjQuery
jQuery
 
Rich Internet Applications con JavaFX e NetBeans
Rich Internet Applications  con JavaFX e NetBeans Rich Internet Applications  con JavaFX e NetBeans
Rich Internet Applications con JavaFX e NetBeans
 
HTL(Sightly) - All you need to know
HTL(Sightly) - All you need to knowHTL(Sightly) - All you need to know
HTL(Sightly) - All you need to know
 
SharePointfest Denver - A jQuery Primer for SharePoint
SharePointfest Denver -  A jQuery Primer for SharePointSharePointfest Denver -  A jQuery Primer for SharePoint
SharePointfest Denver - A jQuery Primer for SharePoint
 
Jquery Complete Presentation along with Javascript Basics
Jquery Complete Presentation along with Javascript BasicsJquery Complete Presentation along with Javascript Basics
Jquery Complete Presentation along with Javascript Basics
 
FSJavaScript.ppt
FSJavaScript.pptFSJavaScript.ppt
FSJavaScript.ppt
 
Jquery tutorial
Jquery tutorialJquery tutorial
Jquery tutorial
 

Más de Ivano Malavolta

Más de Ivano Malavolta (20)

Conducting Experiments on the Software Architecture of Robotic Systems (QRARS...
Conducting Experiments on the Software Architecture of Robotic Systems (QRARS...Conducting Experiments on the Software Architecture of Robotic Systems (QRARS...
Conducting Experiments on the Software Architecture of Robotic Systems (QRARS...
 
The H2020 experience
The H2020 experienceThe H2020 experience
The H2020 experience
 
The Green Lab - Research cocktail @Vrije Universiteit Amsterdam (October 2020)
The Green Lab - Research cocktail  @Vrije Universiteit Amsterdam (October 2020)The Green Lab - Research cocktail  @Vrije Universiteit Amsterdam (October 2020)
The Green Lab - Research cocktail @Vrije Universiteit Amsterdam (October 2020)
 
Software sustainability and Green IT
Software sustainability and Green ITSoftware sustainability and Green IT
Software sustainability and Green IT
 
Navigation-aware and Personalized Prefetching of Network Requests in Android ...
Navigation-aware and Personalized Prefetching of Network Requests in Android ...Navigation-aware and Personalized Prefetching of Network Requests in Android ...
Navigation-aware and Personalized Prefetching of Network Requests in Android ...
 
How Maintainability Issues of Android Apps Evolve [ICSME 2018]
How Maintainability Issues of Android Apps Evolve [ICSME 2018]How Maintainability Issues of Android Apps Evolve [ICSME 2018]
How Maintainability Issues of Android Apps Evolve [ICSME 2018]
 
Collaborative Model-Driven Software Engineering: a Classification Framework a...
Collaborative Model-Driven Software Engineering: a Classification Framework a...Collaborative Model-Driven Software Engineering: a Classification Framework a...
Collaborative Model-Driven Software Engineering: a Classification Framework a...
 
Experimenting on Mobile Apps Quality - a tale about Energy, Performance, and ...
Experimenting on Mobile Apps Quality - a tale about Energy, Performance, and ...Experimenting on Mobile Apps Quality - a tale about Energy, Performance, and ...
Experimenting on Mobile Apps Quality - a tale about Energy, Performance, and ...
 
Modeling objects interaction via UML sequence diagrams [Software Design] [Com...
Modeling objects interaction via UML sequence diagrams [Software Design] [Com...Modeling objects interaction via UML sequence diagrams [Software Design] [Com...
Modeling objects interaction via UML sequence diagrams [Software Design] [Com...
 
Modeling behaviour via UML state machines [Software Design] [Computer Science...
Modeling behaviour via UML state machines [Software Design] [Computer Science...Modeling behaviour via UML state machines [Software Design] [Computer Science...
Modeling behaviour via UML state machines [Software Design] [Computer Science...
 
Object-oriented design patterns in UML [Software Design] [Computer Science] [...
Object-oriented design patterns in UML [Software Design] [Computer Science] [...Object-oriented design patterns in UML [Software Design] [Computer Science] [...
Object-oriented design patterns in UML [Software Design] [Computer Science] [...
 
Structure modeling with UML [Software Design] [Computer Science] [Vrije Unive...
Structure modeling with UML [Software Design] [Computer Science] [Vrije Unive...Structure modeling with UML [Software Design] [Computer Science] [Vrije Unive...
Structure modeling with UML [Software Design] [Computer Science] [Vrije Unive...
 
Requirements engineering with UML [Software Design] [Computer Science] [Vrije...
Requirements engineering with UML [Software Design] [Computer Science] [Vrije...Requirements engineering with UML [Software Design] [Computer Science] [Vrije...
Requirements engineering with UML [Software Design] [Computer Science] [Vrije...
 
Modeling and abstraction, software development process [Software Design] [Com...
Modeling and abstraction, software development process [Software Design] [Com...Modeling and abstraction, software development process [Software Design] [Com...
Modeling and abstraction, software development process [Software Design] [Com...
 
[2017/2018] Agile development
[2017/2018] Agile development[2017/2018] Agile development
[2017/2018] Agile development
 
Reconstructing microservice-based architectures
Reconstructing microservice-based architecturesReconstructing microservice-based architectures
Reconstructing microservice-based architectures
 
[2017/2018] AADL - Architecture Analysis and Design Language
[2017/2018] AADL - Architecture Analysis and Design Language[2017/2018] AADL - Architecture Analysis and Design Language
[2017/2018] AADL - Architecture Analysis and Design Language
 
[2017/2018] Architectural languages
[2017/2018] Architectural languages[2017/2018] Architectural languages
[2017/2018] Architectural languages
 
[2017/2018] Introduction to Software Architecture
[2017/2018] Introduction to Software Architecture[2017/2018] Introduction to Software Architecture
[2017/2018] Introduction to Software Architecture
 
[2017/2018] RESEARCH in software engineering
[2017/2018] RESEARCH in software engineering[2017/2018] RESEARCH in software engineering
[2017/2018] RESEARCH in software engineering
 

Último

Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
ZurliaSoop
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
heathfieldcps1
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
QucHHunhnh
 
Seal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptxSeal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptx
negromaestrong
 

Último (20)

Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptx
 
Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...
 
General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...
 
Dyslexia AI Workshop for Slideshare.pptx
Dyslexia AI Workshop for Slideshare.pptxDyslexia AI Workshop for Slideshare.pptx
Dyslexia AI Workshop for Slideshare.pptx
 
Asian American Pacific Islander Month DDSD 2024.pptx
Asian American Pacific Islander Month DDSD 2024.pptxAsian American Pacific Islander Month DDSD 2024.pptx
Asian American Pacific Islander Month DDSD 2024.pptx
 
Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POS
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
 
PROCESS RECORDING FORMAT.docx
PROCESS      RECORDING        FORMAT.docxPROCESS      RECORDING        FORMAT.docx
PROCESS RECORDING FORMAT.docx
 
Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)
 
ICT role in 21st century education and it's challenges.
ICT role in 21st century education and it's challenges.ICT role in 21st century education and it's challenges.
ICT role in 21st century education and it's challenges.
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.ppt
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
 
Unit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptxUnit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptx
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan Fellows
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
Third Battle of Panipat detailed notes.pptx
Third Battle of Panipat detailed notes.pptxThird Battle of Panipat detailed notes.pptx
Third Battle of Panipat detailed notes.pptx
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
 
Seal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptxSeal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptx
 

Handlebars.js

  • 1. Handlebars.js Ivano Malavolta ivano.malavolta@univaq.it http://www.di.univaq.it/malavolta
  • 2. Roadmap • Why Handlebars • Handlebars Basics • Usage with Require.JS
  • 3. Why Handlebars We are building apps, not web sites We want to separate presentation from logic We don’t want to put any HTML element into Javascript code
  • 4. What we want to avoid Imagine yourself trying to change how a movie should be rendered in your app...
  • 5. Roadmap • Why Handlebars • Handlebars Basics • Usage with Require.JS
  • 6. Example of Template <div class=“userEntry"> <h1> {{username}} </h1> <img> A handlebars expression {{profilePic}} is a {{, some contents, </img> followed by a }} <div class=“status“> {{status}} </div> </div>
  • 7. Values Escaping Handlebars HTML-escapes all the values returned by a {{expression}} If you don't want Handlebars to escape a value, use the "triple-stash“ <div class=“userEntry"> <h1>{{username}}</h1> <div class=“status“> {{{status}}} </div> </div>
  • 8. Template Context A context is a Javascript object used to populate a template var context = { username: “Ivano“, profilePic: “./images/pic.png“, status: “feeling good” };
  • 9. Compiling a Template Templates are defined within a <script> tag or in external files <script id=“user-template" type="text/x-handlebars-template"> // template content </script>
  • 10. Compiling a Template Handlebars.compile is used to compile a template var source = $("#user-template").html(); var template = Handlebars.compile(source); Compiling = obtaining a JS object representing the template
  • 11. Obtaining the final HTML code You have to execute a template with a context in order to get its corresponding HTML code var context = {username: “Ivano“, status: “feeling good” }; var html = template(context); <div class=“userEntry"> <h1>Ivano<h1> <div class=“status“> feeling good </div> </div>
  • 12. Expressions The simplest expression is a simple identifier <h1>{{username}}</h1> This expression means "look up the title property in the current context"
  • 13. Expressions Handlebars expressions can also be dot-separated paths <h1>{{user.username}}</h1> This expression means "look up the user property in the current context, then look up the username property in the result"
  • 14. Helpers Helpers are Javascript functions that return HTML code Handlebars.registerHelper(‘test‘, function(user) { return new Handlebars.SafeString( "<a href='" + user.name + "'>" + user.surname + "</a>" ); }); You should return a Handlebars SafeString if you don't want it to be escaped by default
  • 15. Calling Helpers A Handlebars helper call is a simple identifier, followed by zero or more parameters Each parameter is a Handlebars expression es. {{{ test user }}} In this case, link is the name of a Handlebars helper, and user is a parameter to the helper
  • 16. Built-in Helpers With It shifts the context for a section of a template { title: "My first post!", author: { firstName: "Charles", lastName: "Jolley" } } <div class="entry“> <div class="entry“> <h1>{{title}}</h1> <h1>My first post!</h1> {{#with author}} <h2>By Charles Jolley</h2> <h2>By {{firstName}} {{lastName}}</h2> </div> {{/with}} </div>
  • 17. Built-in Helpers Each To iterate over a list Inside the block, you can use this to reference the element being iterated { people: [ "Yehuda Katz", "Alan Johnson", "Charles Jolley" ] } <ul class="people_list"> <ul class="people_list"> {{#each people}} <li>Yehuda Katz</li> <li>{{this}}</li> <li>Alan Johnson</li> {{/each}} <li>Charles Jolley</li> </ul> </ul>
  • 18. Built-in Helpers If - Else To conditionally render a block It will render the block if its argument is not equal to false, undefined, null, [] <div class="entry"> {{#if author}} The unless <h1>{{firstName}} {{lastName}}</h1> helper is the {{else}} inverse of if <h1>Unknown Author</h1> {{/if}} </div>
  • 19. Handlebars Recall Each Template can contains Expressions and Helpers operating on them You can define your own Helpers that operate on expressions, they return HTML code A template can be (pre)-compiled and must be executed with a Context in order to return the final HTML fragment
  • 20. Roadmap • Why Handlebars • Handlebars Basics • Usage with Require.JS
  • 21. Usage with Require.JS There is a RequireJS plugin that allows you to • Automatically precompile all your templates • Manage templates dependencies with RequireJS • Refer to templates directly within your JS code Reference: https://github.com/SlexAxton/require-handlebars-plugin
  • 22. Library Usage Include the hbs.js plugin and the Handlebars.js file in the same directory of your require.js www/js/lib/require.js www/js/lib/hbs.js www/js/lib/Handlebars.js www/templates/Hi.hbs
  • 23. Template Definition // in file yourApp/templates/Hi.hbs <div class=“test"> Hi, my name is {{ name }}, nice to meet you! </div>
  • 24. Template Execution In your JS files now you can require and execute your templates es. require(['hbs!../templates/Hi'], function ( tmplHi ) { $(‘#block’).html(tmplHi({name: “Ivano"})); }); <div class=“test"> Hi, my name is Ivano, nice to meet you! </div>