Handlebars入门案例及其最常用方法

入门案例

handlebars 模版,只要你定义一个模版,提供一个json对象,handlebars 就能吧json对象放到你定的模版中,非常方便好用!

HTML代码

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  5. <title>Handlebars demo</title>  
  6. <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>  
  7. <script type="text/javascript" src="js/handlebars-1.0.0.beta.6.js"></script>  
  8. <script type="text/javascript" src="js/mytest.js"></script>  
  9. <style type="text/css"></style>  
  10. </head>  
  11. <body>  
  12.     <h2>Simple handlebars demo</h2>  
  13.     <button id="btn_simple">Click me</button>  
  14.     <div id="my_div">  
  15.   
  16.     </div>  
  17.     <h2>Handlebars Helpers demo</h2>  
  18.     <button id="btn_helper">Click me</button>  
  19.     <div id="helper_div">  
  20.   
  21.     </div>  
  22.     <script id="some-template" type="text/x-handlebars-template">  
  23.           <table>  
  24.             <thead>  
  25.               <th>Username</th>  
  26.               <th>Real Name</th>  
  27.               <th>Email</th>  
  28.             </thead>  
  29.             <tbody>  
  30.               {{#if users}}  
  31.                 <tr>  
  32.                   <td>{{username}}</td>  
  33.                   <td>{{firstName}} {{lastName}}</td>  
  34.                   <td>{{email}}</td>  
  35.                 </tr>  
  36.               {{else}}  
  37.                 <tr>  
  38.                   <td colspan="3">NO users!</td>  
  39.                 </tr>  
  40.               {{/if}}  
  41.             </tbody>  
  42.           </table>  
  43.     </script>  
  44.     <script id="helper-template" type="text/x-handlebars-template">  
  45.         <div>  
  46.           <h1>By {{fullName author}}</h1>  
  47.           <div>{{body}}</div>  
  48.   
  49.           <h1>Comments</h1>  
  50.   
  51.           {{#each comments}}  
  52.           <h2>By {{fullName author}}</h2>  
  53.           <div>{{body}}</h2>  
  54.           {{/each}}  
  55.         </div>  
  56.     </script>  
  57. </body>  
  58. </html>  
mytest.js

  1. $(document).ready(function(){  
  2.     Handlebars.registerHelper('fullName'function(person) {  
  3.       return person.firstName + " " + person.lastName;  
  4.     });  
  5.   $("#btn_simple").click(function(){  
  6.     // $(this).hide();  
  7.     showTemplate();  
  8.   });  
  9.    $("#btn_helper").click(function(){  
  10.   
  11.     showHowUseHelper();  
  12.   });  
  13. });  
  14. // var context = {title: "My New Post", body: "This is my first post!"};  
  15. var persion = {title :"My New Post",body:"This is my first post!"}  
  16. function showTemplate(){  
  17.     var source   = $("#some-template").html();  
  18.     var template = Handlebars.compile(source);  
  19.       var data = { users: [  
  20.           {username: "alan", firstName: "Alan", lastName: "Johnson", email: "alan@test.com" },  
  21.           {username: "allison", firstName: "Allison", lastName: "House", email: "allison@test.com" },  
  22.           {username: "ryan", firstName: "Ryan", lastName: "Carson", email: "ryan@test.com" }  
  23.         ]};  
  24.       $("#my_div").html(template(data));;  
  25. }  
  26.   
  27. function showHowUseHelper(){  
  28.     var context = {  
  29.       author: {firstName: "Alan", lastName: "Johnson"},  
  30.       body: "I Love Handlebars",  
  31.       comments: [{  
  32.         author: {firstName: "Yehuda", lastName: "Katz"},  
  33.         body: "Me too!"  
  34.       }]  
  35.     };  
  36.     var source   = $("#helper-template").html();  
  37.     var template = Handlebars.compile(source);  
  38.     $("#helper_div").html(template(context));;  
  39.       
  40. }  

常用方法

1)、最简单的Handlebars模版使用。

首先创建handlebarExample.html。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <title>handlebarExample.html</title>
</head>
<body>
</body>
</html>

添加js库:

<head>
 <title>handlebarExample.html</title>
 <script type="text/javascript" src="javascripts/jquery/jquery-1.7.1.min.js"></script>
 <script type="text/javascript" src="javascripts/handlebars/handlebars-1.0.0.beta.6.js"></script>
</head>

添加handlebars模版:

<script id="entry-template" type="text/x-handlebars-template">
 <div class="entry">
 <h1>{{title}}</h1>
 <div class="body">
 {{body}}
 </div>
 </div>
</script>

添加读取js函数:

<script type="text/javascript">
 $(document).ready(function(){
 var source = $("#entry-template").html();
 var template = Handlebars.compile(source);
 var context = {title: "标题", body: "内容"}
 var html = template(context);
 $(".mainBody").html(html);
 });
</script>

执行结果如下:

<body>
<div>
 <h1>标题</h1>
 <div>
 内容
 </div>
</div>
</body>

上面是一个最简单的Handlebars模版应用,其中template(context)是生成相应的html节点,并且添加到页面上。其中context可以添加相应的标签。

2)Block expressions使用方法

可以自定义模版标签,利用helper生成相应的html代码:

首先修改模版:

<script id="entry-template" type="text/x-handlebars-template">
 {{#list people}}{{firstName}} {{lastName}}{{/list}}
</script>

修改context和渲染成html

<script type="text/javascript">
 $(document).ready(function(){
 var source = $("#entry-template").html();
 var template = Handlebars.compile(source);
 var context =
 {
 people: [
 {firstName: "Yehuda", lastName: "Katz"},
 {firstName: "Carl", lastName: "Lerche"},
 {firstName: "Alan", lastName: "Johnson"}
 ]
 }
 Handlebars.registerHelper('list', function(items, options) {
 var out = "<ul>";
 for(var i=0, l=items.length; i<l; i++) {
 out = out + "<li>" + options.fn(items[i]) + "</li>";
 }
 return out + "</ul>";
 });
 var html = template(context);
 $(".mainBody").html(html);
 });
</script>

生成的代码效果如下:

  • Yehuda Katz
  • Carl Lerche
  • Alan Johnson

添加一个名叫list的helper,funcitons(items, options)传入两个参数, data中的people作为第一个参数传入,options作为第二个参数传入,options附带属性fn,使用fn可以调用该模块的内容。

 

3)、With Expressions 使用方法

直接添加模版并且生成节点,添加到页面。

var source = "<p>{{lastName}}, {{firstName}}</p>";
 var template = Handlebars.compile(source);
 var html =template({firstName: "Alan", lastName: "Johnson"});

添加模版:

<script id="entry-template" type="text/x-handlebars-template">
 <div class="entry">
 <h1>{{title}}</h1>
 {{#with author}}
 <h2>By {{firstName}} {{lastName}}</h2>
 {{/with}}
 </div>
</script>

添加模版数据内容:

<script type="text/javascript">
 $(document).ready(function(){
 var source = $("#entry-template").html();
 var template = Handlebars.compile(source);
 var context =
 {
 title: "My first post!",
 author: {
 firstName: "Charles",
 lastName: "Jolley"
 }
 }
 var html = template(context);
 $(".mainBody").html(html);
 });
</script>

其中使用with标签可以访问数据结构中的author对象中的相应元素。在实际的编程中,这一点非常有用,因为数据的不同对象需要展示到相同的页面上。所以with标签非常有用。

4)、Each helpers 用法

可以利用each标签,循环数据。

添加模版:

<script id="entry-template" type="text/x-handlebars-template">
 <ul class="people_list">
 {{#each people}}
 <li>{{this}}</li>
 {{/each}}
 </ul>
</script>

实现数据添加和展示:

<script type="text/javascript">
 $(document).ready(function(){
 var source = $("#entry-template").html();
 var template = Handlebars.compile(source);
 var context =
 {
 people: [
 "Yehuda Katz",
 "Alan Johnson",
 "Charles Jolley"
 ]
 }
 var html = template(context);
 $(".mainBody").html(html);
 });
</script>

显示的结果:

  • Yehuda Katz
  • Alan Johnson
  • Charles Jolley

5)、if helpers 用法

使用if模块,可以实现想用的逻辑。

模版:

<div class="entry">
 {{#if author}}
 <h1>{{firstName}} {{lastName}}</h1>
 {{else}}
 <h1>Unknown Author</h1>
 {{/if}}
 </div>

添加数据:

<script type="text/javascript">
 $(document).ready(function(){
 var source = $("#entry-template").html();
 var template = Handlebars.compile(source);
 var context ={}
 var html = template(context);
 $(".mainBody").html(html);
 });
</script>

由于数据为空,直接显示Unknown Author。

6)、Handlebars Paths

Handlebars数据也支持相应的路径。

模版:

<div class="entry">
  <h1>{{title}}</h1>
  <h2>By {{author.name}}</h2>

  <div class="body">
    {{body}}
  </div>
</div>

相应的数据:

<script type="text/javascript">
 $(document).ready(function(){
 var source = $("#entry-template").html();
 var template = Handlebars.compile(source);
 var context = {
 title: "My First Blog Post!",
 author: {
 id: 47,
 name: "Yehuda Katz"
 },
 body: "My first post. Wheeeee!"
 };
 var html = template(context);
 $(".mainBody").html(html);
 });
</script>

其中<h2>By {{author.name}}</h2>可以显示author对象中的name。

7)、使用Helpers

用户自定义helpers。

模版:

<script id="entry-template" type="text/x-handlebars-template">
 <div class="post">
 <h1>By {{fullName author}}</h1>
 <div class="body">{{body}}</div>
 <h1>Comments</h1>
 {{#each comments}}
 <h2>By {{fullName author}}</h2>
 <div class="body">{{body}}</div>
 {{/each}}
 </div>
</script>

数据:

<script type="text/javascript">
 $(document).ready(function(){
 var source = $("#entry-template").html();
 var template = Handlebars.compile(source);
 var context = {
 author: {firstName: "Alan", lastName: "Johnson"},
 body: "I Love Handlebars",
 comments: [{
 author: {firstName: "Yehuda", lastName: "Katz"},
 body: "Me too!"
 }]
 };
 Handlebars.registerHelper('fullName', function(person) {
 return person.firstName + " " + person.lastName;
 });
 var html = template(context);
 $(".mainBody").html(html);
 });
</script>

其中利用help实现了fullName标签。

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值