SlideShare a Scribd company logo
1 of 19
Using Handlebars
Dr. Charles Severance
www.wa4e.com
http://www.wa4e.com/code/handlebars.zip
Rendering in the Browser
Applications are starting to use JSON
“back end” services and construct the
View HTML in JavaScript
– www.backbonejs.org
– www.emberjs.com
– www.angular.net
– www.reactjs.net
– ...
The only correct way to write
JavaScript is whatever you were not
doing last week.
@ThePracticalDev
Web Server Database Server
Time
Apache
PHP
MySql
Browser
JavaScri
pt
D
O
M Parse
Respons
e
Send
Request
http://www.wa4e.com/code/rrc/
JQuery
Model-View-Controller
A model that defines the elements of
a web application and how they
interact
•View – Produce output
•Model – Handle data
•Controller – Orchestration / Routing
https://en.wikipedia.org/wiki/Model-view-controller
guess.php
<?php
$oldguess = '';
$message = false;
if ( isset($_POST['guess']) ) {
// Trick for integer / numeric parameters
$oldguess = $_POST['guess'] + 0;
if ( $oldguess == 42 ) {
$message = "Great job!";
} else if ( $oldguess < 42 ) {
$message = "Too low";
} else {
$message = "Too high...";
}
}
?>
<html>
<head>
<title>A Guessing game</title>
</head>
<body style="font-family: sans-serif;">
<p>Guessing game...</p>
<?php
if ( $message !== false ) {
echo("<p>$message</p>n");
}
?>
<form method="post">
<p><label for="guess">Input Guess</label>
<input type="text" name="guess" id="guess" size="40"
value="<?= htmlentities($oldguess) ?>"/></p>
<input type="submit"/>
</form>
</body>
Model
View
Controller
Context
Web Server Database Server
Time
Apache
PHP
MySql
Browser
JavaScri
pt
D
O
M Parse
Respons
e
Send
Request
MVC in PHP
P
D
O
View
Controller
Context
Model
handlebars.js
• Templates with curly braces
– Adapted from Django / AppEngine
• Hot spots accept data from the context
<div class="entry">
<h1>{{title}}</h1>
<div class="body">
{{body}}
</div>
</div>
Context
<div class="entry">
<h1>Equations</h1>
<div class="body">
guess &lt; 42
</div>
</div>
+ =
<div id="stuff"><img src="spinner.gif"></div>
<script id="entry-template" type="text/x-handlebars-template">
<div class="entry">
<h1>{{title}}</h1>
<div class="body">
{{body}}
</div>
</div>
</script>
<script>
var raw_tempate = $("#entry-template").html();
var template = Handlebars.compile(raw_template);
var context = {title: "Equations", body: "guess < 42"};
var rendered = template(context);
alert('Check out the sweet spinner..:)');
$('#stuff').html(rendered);
</script> hand-01.htm
Web Server Database Server
Time
Apache
PHP
MySql
Browser
JavaScri
pt
D
O
M Parse
Respons
e
Send
Request
MVC in PHP
P
D
O
View
Controller
Context
Model
Web Server Database Server
Time
Apache
PHP
MySql
Browser
JavaScri
pt
D
O
M Parse
Respons
e
Send
Request
View in JavaScript
P
D
O
View
Controller
Context
Model
Context
<div id="stuff"><img src="spinner.gif"></div>
<script id="entry-template" type="text/x-handlebars-template">
<div class="entry">
<h1>{{title}}</h1>
<div class="body">
{{body}}
</div>
</div>
</script>
<script>
var raw_tempate = $("#entry-template").html();
var template = Handlebars.compile(raw_template);
$.getJSON('hand-02-json.php', function (context) {
var rendered = template(context);
$('#stuff').replaceWith(rendered);
});
</script>
hand-02.htm
<?php
header('Content-Type: ...');
$stuff = array(
'title' => 'Mathematics',
'body' => 'guess > 42');
echo(json_encode($stuff));
{ "title":"Mathematics",
"body":"guess > 42" }
Handlebars Application
<script id="list-template" type="text/x-handlebars-template">
{{#if profiles.length}}
<p><table border="1">
<tr><th>Name</th><th>Headline</th>
{{#if loggedin}}<th>Action</th>{{/if}}</tr>
{{#each profiles}}
<tr><td><a href="view.php?profile_id={{profile_id}}">
{{first_name}} {{last_name}}</a>
</td><td>{{headline}}</td>
{{#if ../loggedin}}
<td>
<a href="form.php?profile_id={{profile_id}}">Edit</a>
<a href="delete.php?profile_id={{profile_id}}">Delete</a>
</td>
{{/if}}
</tr>
{{/each}}
</table></p>
{{/if}}
</script>
index.php
res-handlebars
<div id="list-area"><img src="spinner.gif"></div>
....
<script>
$(document).ready(function(){
$.getJSON('profiles.php', function(profiles) {
window.console && console.log(profiles);
var source = $("#list-template").html();
var template = Handlebars.compile(source);
var context = {};
context.loggedin =
<?= isset($_SESSION['user_id']) ? 'true' : 'false' ?>;
context.profiles = profiles;
$('#list-area').replaceWith(template(context));
}).fail( function() { alert('getJSON fail'); } );
});
</script>
index.php
<?php
// This script works even if you are not logged in
require_once 'pdo.php';
header("Content-type: application/json; charset=utf-8");
$stmt = $pdo->query('SELECT * FROM Profile');
$profiles = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo(json_encode($profiles, JSON_PRETTY_PRINT));
profiles.php
profiles.php
[
{
"profile_id": "5",
"user_id": "1",
"first_name": "Chuck",
"last_name": "Severance",
"email": "csev@example.com",
"headline": "Python Rulez",
"summary": "Python",
"updated_at": "2016-04-04 21:15:27"
},
{
"profile_id": "6",
"user_id": "1",
"first_name": "Colleen",
"last_name": "van Lent",
"email": "colleen@example.com",
"headline": "Responsive Design Rulez",
"summary": "HTML5!",
"updated_at": "2016-04-04 21:16:12"
}
]
Web Server Database Server
Time
Apache MySql
Browser
JavaScript
D
O
M
Parse
Respons
e
Send
Request
Single Page Application - Angular
P
D
O
View
Controller Model
Context Model
Model
Summary
• With JavaScript ES6 on the way and significant
browser improvements on the horizon, it is
likely that the “best practice” both on the
server and the client will continue to evolve.
• It will continue to be important to understand
how web applications work “all the way down”
so you can work with these new innovations.
The only correct way to write
JavaScript is whatever you were not
doing last week.
@ThePracticalDev
Acknowledgements / Contributions
These slides are Copyright 2010- Charles R. Severance
(www.dr-chuck.com) as part of www.wa4e.com and made
available under a Creative Commons Attribution 4.0 License.
Please maintain this last slide in all copies of the document to
comply with the attribution requirements of the license. If you
make a change, feel free to add your name and organization
to the list of contributors on this page as you republish the
materials.
Initial Development: Charles Severance, University of
Michigan School of Information
Insert new Contributors and Translators here including names
and dates
Continue new Contributors and Translators here

More Related Content

Similar to JS-05-Handlebars.ppt

Oracle Application Express & jQuery Mobile - OGh Apex Dag 2012
Oracle Application Express & jQuery Mobile - OGh Apex Dag 2012Oracle Application Express & jQuery Mobile - OGh Apex Dag 2012
Oracle Application Express & jQuery Mobile - OGh Apex Dag 2012crokitta
 
Implementation of GUI Framework part3
Implementation of GUI Framework part3Implementation of GUI Framework part3
Implementation of GUI Framework part3masahiroookubo
 
FamilySearch Reference Client
FamilySearch Reference ClientFamilySearch Reference Client
FamilySearch Reference ClientDallan Quass
 
Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Joao Lucas Santana
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the FinishYehuda Katz
 
Summer - The HTML5 Library for Java and Scala
Summer - The HTML5 Library for Java and ScalaSummer - The HTML5 Library for Java and Scala
Summer - The HTML5 Library for Java and Scalarostislav
 
Your Custom WordPress Admin Pages Suck
Your Custom WordPress Admin Pages SuckYour Custom WordPress Admin Pages Suck
Your Custom WordPress Admin Pages SuckAnthony Montalbano
 
GHC Participant Training
GHC Participant TrainingGHC Participant Training
GHC Participant TrainingAidIQ
 
AngularJS Mobile Warsaw 20-10-2014
AngularJS Mobile Warsaw 20-10-2014AngularJS Mobile Warsaw 20-10-2014
AngularJS Mobile Warsaw 20-10-2014Dariusz Kalbarczyk
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsFrancois Zaninotto
 
JavaServer Faces 2.0 - JavaOne India 2011
JavaServer Faces 2.0 - JavaOne India 2011JavaServer Faces 2.0 - JavaOne India 2011
JavaServer Faces 2.0 - JavaOne India 2011Arun Gupta
 
JavaScript on Rails 튜토리얼
JavaScript on Rails 튜토리얼JavaScript on Rails 튜토리얼
JavaScript on Rails 튜토리얼Sukjoon Kim
 
Introduction to angular js july 6th 2014
Introduction to angular js   july 6th 2014Introduction to angular js   july 6th 2014
Introduction to angular js july 6th 2014Simona Clapan
 
Private slideshow
Private slideshowPrivate slideshow
Private slideshowsblackman
 
Enjoy the vue.js
Enjoy the vue.jsEnjoy the vue.js
Enjoy the vue.jsTechExeter
 
Styling components with JavaScript
Styling components with JavaScriptStyling components with JavaScript
Styling components with JavaScriptbensmithett
 
Java Web Development with Stripes
Java Web Development with StripesJava Web Development with Stripes
Java Web Development with StripesSamuel Santos
 
AnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFacesAnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFacesAnkara JUG
 

Similar to JS-05-Handlebars.ppt (20)

Oracle Application Express & jQuery Mobile - OGh Apex Dag 2012
Oracle Application Express & jQuery Mobile - OGh Apex Dag 2012Oracle Application Express & jQuery Mobile - OGh Apex Dag 2012
Oracle Application Express & jQuery Mobile - OGh Apex Dag 2012
 
Jsf
JsfJsf
Jsf
 
Implementation of GUI Framework part3
Implementation of GUI Framework part3Implementation of GUI Framework part3
Implementation of GUI Framework part3
 
FamilySearch Reference Client
FamilySearch Reference ClientFamilySearch Reference Client
FamilySearch Reference Client
 
Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the Finish
 
Summer - The HTML5 Library for Java and Scala
Summer - The HTML5 Library for Java and ScalaSummer - The HTML5 Library for Java and Scala
Summer - The HTML5 Library for Java and Scala
 
Django Vs Rails
Django Vs RailsDjango Vs Rails
Django Vs Rails
 
Your Custom WordPress Admin Pages Suck
Your Custom WordPress Admin Pages SuckYour Custom WordPress Admin Pages Suck
Your Custom WordPress Admin Pages Suck
 
GHC Participant Training
GHC Participant TrainingGHC Participant Training
GHC Participant Training
 
AngularJS Mobile Warsaw 20-10-2014
AngularJS Mobile Warsaw 20-10-2014AngularJS Mobile Warsaw 20-10-2014
AngularJS Mobile Warsaw 20-10-2014
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node js
 
JavaServer Faces 2.0 - JavaOne India 2011
JavaServer Faces 2.0 - JavaOne India 2011JavaServer Faces 2.0 - JavaOne India 2011
JavaServer Faces 2.0 - JavaOne India 2011
 
JavaScript on Rails 튜토리얼
JavaScript on Rails 튜토리얼JavaScript on Rails 튜토리얼
JavaScript on Rails 튜토리얼
 
Introduction to angular js july 6th 2014
Introduction to angular js   july 6th 2014Introduction to angular js   july 6th 2014
Introduction to angular js july 6th 2014
 
Private slideshow
Private slideshowPrivate slideshow
Private slideshow
 
Enjoy the vue.js
Enjoy the vue.jsEnjoy the vue.js
Enjoy the vue.js
 
Styling components with JavaScript
Styling components with JavaScriptStyling components with JavaScript
Styling components with JavaScript
 
Java Web Development with Stripes
Java Web Development with StripesJava Web Development with Stripes
Java Web Development with Stripes
 
AnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFacesAnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFaces
 

Recently uploaded

Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMartaLoveguard
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts servicevipmodelshub1
 
Git and Github workshop GDSC MLRITM
Git and Github  workshop GDSC MLRITMGit and Github  workshop GDSC MLRITM
Git and Github workshop GDSC MLRITMgdsc13
 
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作ys8omjxb
 
Contact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New DelhiContact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New Delhimiss dipika
 
Complet Documnetation for Smart Assistant Application for Disabled Person
Complet Documnetation   for Smart Assistant Application for Disabled PersonComplet Documnetation   for Smart Assistant Application for Disabled Person
Complet Documnetation for Smart Assistant Application for Disabled Personfurqan222004
 
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书zdzoqco
 
Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Sonam Pathan
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012rehmti665
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationLinaWolf1
 
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)Christopher H Felton
 
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With RoomVIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Roomishabajaj13
 
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130  Available With RoomVIP Kolkata Call Girl Kestopur 👉 8250192130  Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Roomdivyansh0kumar0
 
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Dana Luther
 
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一Fs
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Sonam Pathan
 

Recently uploaded (20)

Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptx
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
 
Git and Github workshop GDSC MLRITM
Git and Github  workshop GDSC MLRITMGit and Github  workshop GDSC MLRITM
Git and Github workshop GDSC MLRITM
 
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
 
Contact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New DelhiContact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New Delhi
 
Complet Documnetation for Smart Assistant Application for Disabled Person
Complet Documnetation   for Smart Assistant Application for Disabled PersonComplet Documnetation   for Smart Assistant Application for Disabled Person
Complet Documnetation for Smart Assistant Application for Disabled Person
 
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in  Rk Puram 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Rk Puram 🔝 9953056974 🔝 Delhi escort Service
 
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
 
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
 
Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 Documentation
 
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
 
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With RoomVIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
 
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
 
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130  Available With RoomVIP Kolkata Call Girl Kestopur 👉 8250192130  Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
 
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
 
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
 
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
 

JS-05-Handlebars.ppt

  • 1. Using Handlebars Dr. Charles Severance www.wa4e.com http://www.wa4e.com/code/handlebars.zip
  • 2. Rendering in the Browser Applications are starting to use JSON “back end” services and construct the View HTML in JavaScript – www.backbonejs.org – www.emberjs.com – www.angular.net – www.reactjs.net – ... The only correct way to write JavaScript is whatever you were not doing last week. @ThePracticalDev
  • 3. Web Server Database Server Time Apache PHP MySql Browser JavaScri pt D O M Parse Respons e Send Request http://www.wa4e.com/code/rrc/ JQuery
  • 4. Model-View-Controller A model that defines the elements of a web application and how they interact •View – Produce output •Model – Handle data •Controller – Orchestration / Routing https://en.wikipedia.org/wiki/Model-view-controller
  • 5. guess.php <?php $oldguess = ''; $message = false; if ( isset($_POST['guess']) ) { // Trick for integer / numeric parameters $oldguess = $_POST['guess'] + 0; if ( $oldguess == 42 ) { $message = "Great job!"; } else if ( $oldguess < 42 ) { $message = "Too low"; } else { $message = "Too high..."; } } ?> <html> <head> <title>A Guessing game</title> </head> <body style="font-family: sans-serif;"> <p>Guessing game...</p> <?php if ( $message !== false ) { echo("<p>$message</p>n"); } ?> <form method="post"> <p><label for="guess">Input Guess</label> <input type="text" name="guess" id="guess" size="40" value="<?= htmlentities($oldguess) ?>"/></p> <input type="submit"/> </form> </body> Model View Controller Context
  • 6. Web Server Database Server Time Apache PHP MySql Browser JavaScri pt D O M Parse Respons e Send Request MVC in PHP P D O View Controller Context Model
  • 7. handlebars.js • Templates with curly braces – Adapted from Django / AppEngine • Hot spots accept data from the context <div class="entry"> <h1>{{title}}</h1> <div class="body"> {{body}} </div> </div> Context <div class="entry"> <h1>Equations</h1> <div class="body"> guess &lt; 42 </div> </div> + =
  • 8. <div id="stuff"><img src="spinner.gif"></div> <script id="entry-template" type="text/x-handlebars-template"> <div class="entry"> <h1>{{title}}</h1> <div class="body"> {{body}} </div> </div> </script> <script> var raw_tempate = $("#entry-template").html(); var template = Handlebars.compile(raw_template); var context = {title: "Equations", body: "guess < 42"}; var rendered = template(context); alert('Check out the sweet spinner..:)'); $('#stuff').html(rendered); </script> hand-01.htm
  • 9. Web Server Database Server Time Apache PHP MySql Browser JavaScri pt D O M Parse Respons e Send Request MVC in PHP P D O View Controller Context Model
  • 10. Web Server Database Server Time Apache PHP MySql Browser JavaScri pt D O M Parse Respons e Send Request View in JavaScript P D O View Controller Context Model Context
  • 11. <div id="stuff"><img src="spinner.gif"></div> <script id="entry-template" type="text/x-handlebars-template"> <div class="entry"> <h1>{{title}}</h1> <div class="body"> {{body}} </div> </div> </script> <script> var raw_tempate = $("#entry-template").html(); var template = Handlebars.compile(raw_template); $.getJSON('hand-02-json.php', function (context) { var rendered = template(context); $('#stuff').replaceWith(rendered); }); </script> hand-02.htm <?php header('Content-Type: ...'); $stuff = array( 'title' => 'Mathematics', 'body' => 'guess > 42'); echo(json_encode($stuff)); { "title":"Mathematics", "body":"guess > 42" }
  • 13. <script id="list-template" type="text/x-handlebars-template"> {{#if profiles.length}} <p><table border="1"> <tr><th>Name</th><th>Headline</th> {{#if loggedin}}<th>Action</th>{{/if}}</tr> {{#each profiles}} <tr><td><a href="view.php?profile_id={{profile_id}}"> {{first_name}} {{last_name}}</a> </td><td>{{headline}}</td> {{#if ../loggedin}} <td> <a href="form.php?profile_id={{profile_id}}">Edit</a> <a href="delete.php?profile_id={{profile_id}}">Delete</a> </td> {{/if}} </tr> {{/each}} </table></p> {{/if}} </script> index.php res-handlebars
  • 14. <div id="list-area"><img src="spinner.gif"></div> .... <script> $(document).ready(function(){ $.getJSON('profiles.php', function(profiles) { window.console && console.log(profiles); var source = $("#list-template").html(); var template = Handlebars.compile(source); var context = {}; context.loggedin = <?= isset($_SESSION['user_id']) ? 'true' : 'false' ?>; context.profiles = profiles; $('#list-area').replaceWith(template(context)); }).fail( function() { alert('getJSON fail'); } ); }); </script> index.php
  • 15. <?php // This script works even if you are not logged in require_once 'pdo.php'; header("Content-type: application/json; charset=utf-8"); $stmt = $pdo->query('SELECT * FROM Profile'); $profiles = $stmt->fetchAll(PDO::FETCH_ASSOC); echo(json_encode($profiles, JSON_PRETTY_PRINT)); profiles.php
  • 16. profiles.php [ { "profile_id": "5", "user_id": "1", "first_name": "Chuck", "last_name": "Severance", "email": "csev@example.com", "headline": "Python Rulez", "summary": "Python", "updated_at": "2016-04-04 21:15:27" }, { "profile_id": "6", "user_id": "1", "first_name": "Colleen", "last_name": "van Lent", "email": "colleen@example.com", "headline": "Responsive Design Rulez", "summary": "HTML5!", "updated_at": "2016-04-04 21:16:12" } ]
  • 17. Web Server Database Server Time Apache MySql Browser JavaScript D O M Parse Respons e Send Request Single Page Application - Angular P D O View Controller Model Context Model Model
  • 18. Summary • With JavaScript ES6 on the way and significant browser improvements on the horizon, it is likely that the “best practice” both on the server and the client will continue to evolve. • It will continue to be important to understand how web applications work “all the way down” so you can work with these new innovations. The only correct way to write JavaScript is whatever you were not doing last week. @ThePracticalDev
  • 19. Acknowledgements / Contributions These slides are Copyright 2010- Charles R. Severance (www.dr-chuck.com) as part of www.wa4e.com and made available under a Creative Commons Attribution 4.0 License. Please maintain this last slide in all copies of the document to comply with the attribution requirements of the license. If you make a change, feel free to add your name and organization to the list of contributors on this page as you republish the materials. Initial Development: Charles Severance, University of Michigan School of Information Insert new Contributors and Translators here including names and dates Continue new Contributors and Translators here