解决方案

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

seo靠我 2023-09-23 22:07:06

入门案例

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

HTML代码

<!DOCTYPE html PUBLSEO靠我IC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html>   <head>   <metaSEO靠我 http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Handlebars demo</title>   <script SEO靠我type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></scriSEO靠我pt> <script type="text/javascript" src="js/handlebars-1.0.0.beta.6.js"></script>   <script type="text/jaSEO靠我vascript" src="js/mytest.js"></script> <style type="text/css"></style>   </head>   <body>   <h2>Simple handlebSEO靠我ars demo</h2>     <button id="btn_simple">Click me</button>       <div id="my_div">       </div>   <h2>Handlebars Helpers SEO靠我demo</h2>     <button id="btn_helper">Click me</button>       <div id="helper_div">       </div>   <script id="some-templaSEO靠我te" type="text/x-handlebars-template">           <table>               <thead>                 <th>Username</th>                 <th>Real Name</th>   <th>Email</thSEO靠我>             </thead>               <tbody>                 {{#if users}}                   <tr>                     <td>{{username}}</td>                     <td>{{firstName}} {{lastName}}</td>   <td>{{emailSEO靠我}}</td>                 </tr>                 {{else}}                   <tr>                     <td colspan="3">NO users!</td>                   </tr>                 {{/if}}               </tbody>             </table>       </script>   <script iSEO靠我d="helper-template" type="text/x-handlebars-template">         <div>             <h1>By {{fullName author}}</h1>   <div> SEO靠我 {{body}}</div>           <h1>Comments</h1>             {{#each comments}}             <h2>By {{fullName author}}</h2>   <div> SEO靠我 {{body}}</h2>           {{/each}}           </div>       </script>   </body>   </html>   mytest.js $(document).ready(function(){   HanSEO靠我dlebars.registerHelper(fullName, function(person) {       return person.firstName + " " + person.lastName;   }SEO靠我);   $("#btn_simple").click(function(){       // $(this).hide();       showTemplate();     });   $("#btn_helper").click(functSEO靠我ion(){     showHowUseHelper();     });   });   // var context = {title: "My New Post", body: "This is my first post!SEO靠我"}; var persion = {title :"My New Post",body:"This is my first post!"}   function showTemplate(){   var souSEO靠我rce   = $("#some-template").html();     var template = Handlebars.compile(source);         var data = { users: [   {uSEO靠我sername: "alan", firstName: "Alan", lastName: "Johnson", email: "alan@test.com" }, {username: "allisoSEO靠我n", firstName: "Allison", lastName: "House", email: "allison@test.com" }, {username: "ryan", firstNamSEO靠我e: "Ryan", lastName: "Carson", email: "ryan@test.com" }         ]};         $("#my_div").html(template(data));;   }   functiSEO靠我on showHowUseHelper(){     var context = {         author: {firstName: "Alan", lastName: "Johnson"},   body: "I Love SEO靠我Handlebars",       comments: [{           author: {firstName: "Yehuda", lastName: "Katz"},           body: "Me too!"         }]       };   var sourcSEO靠我e   = $("#helper-template").html();     var template = Handlebars.compile(source);   $("#helper_div").html(tSEO靠我emplate(context));; }   常用方法

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

首先创建handlebarExample.html。

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

添加js库:

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

添加handlebars模版:

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

添加读取js函数:

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

执行结果如下:

<body> <div><h1>标题</h1><div>内容</div> </div> SEO靠我 </body>

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

2SEO靠我)Block expressions使用方法

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

首先修改模版:

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

修改contSEO靠我ext和渲染成html

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

生成的代码效果如下:

Yehuda KatzCarl LerSEO靠我cheAlan Johnson

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

3)、With Expressions 使用方法

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

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

添加模版:

<script id="entry-template" type="text/x-handlebars-template"><diSEO靠我v class="entry"><h1>{{title}}</h1>{{#with author}}<h2>By {{firstName}} {{lastName}}</h2>{{/with}}</dSEO靠我iv> </script>

添加模版数据内容:

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

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

4)、Each helpers 用法

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

添加模版:

<script id="entry-template" typSEO靠我e="text/x-handlebars-template"><ul class="people_list">{{#each people}}<li>{{this}}</li>{{/each}}</uSEO靠我l> </script>

实现数据添加和展示:

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

显示的结果:

Yehuda KatzAlan JohnsonCharles Jolley

5)、if helpers 用法

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

模版:

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

添加数据:

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

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

6)、HandlebarsSEO靠我 Paths

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

模版:

<div class="entry"><h1>{{title}}</h1><h2>By {{author.name}}</h2><div cSEO靠我lass="body"> {{body}}</div> </div>

相应的数据:

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

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

7)、使用Helpers

用户自定义helpers。

模版:

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

数据:

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

其中利用help实现了fSEO靠我ullName标签。

“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2