1 <!DOCTYPE html>
2 <html>
3 <head>
4 <META http-equiv=Content-Type content="text/html; charset=utf-8">
5 <title>each嵌套 - by 杨元
</title>
6 </head>
7 <body>
8 <h1>each嵌套
</h1>
9 <!--基础html框架-->
10 <div id="dataList"></div>
11
12 <!--插件引用-->
13 <script type="text/javascript" src="script/jquery.js"></script>
14 <script type="text/javascript" src="script/handlebars-1.0.0.beta.6.js"></script>
15
16 <!--Handlebars.js模版-->
17 <!--Handlebars.js模版放在script标签中,保留了html原有层次结构,模版中要写一些操作语句-->
18 <!--id可以用来唯一确定一个模版,type是模版固定的写法-->
19 <script id="table-template" type="text/x-handlebars-template">
20 {{#each this}}
21 {{#each info}}
22 {{../name}}的{{this}}<br>
23 {{/each}}
24 {{/each}}
25 </script>
26
27 <!--进行数据处理、html构造-->
28 <script type="text/javascript">
29 $(document).ready(function() {
30 //模拟的json对象
31 var data = [{
32 "name":"张三",
33 "info":[
34 "眼睛",
35 "耳朵",
36 "鼻子"
37 ]
38 },{
39 "name":"李四",
40 "info":[
41 "爸爸",
42 "妈妈",
43 "妻子"
44 ]
45 }];
46
47 //注册一个Handlebars模版,通过id找到某一个模版,获取模版的html框架
48 //$("#table-template").html()是jquery的语法,不懂的童鞋请恶补。。。
49 var myTemplate = Handlebars.compile($("#table-template").html());
50
51 //将json对象用刚刚注册的Handlebars模版封装,得到最终的html,插入到基础table中。
52 $('#dataList').html(myTemplate(data));
53 });
54 </script>
55 </body>
56 </html>
循环嵌套在稍微复杂点的页面设计中即会涉及,Handlebars.js完全支持each嵌套,可以在each中使用each。
上边的例子演示了两个关键点:each嵌套的可实现性、如何在each嵌套中读取父each中的数据。
例子很简单,info本身是一个信息列表,是属于某个人的,我们先用each遍历所有的人,然后再遍历每个人的info信息,这样就形成了each嵌套。但是我们想在内层each中获取外层each的数据,达到“谁的什么”这样的显示效果。
显然,如果直接在内层each中使用{{name}},是取不到任何数据的,因为内层each的上下文是info,而name属性在表示人的上下文中。
此时,可以用{{../name}}从内层each获取上一级each的name属性,语法和html的路径表示一样,简单吧?
作者:杨元 欢迎任何形式的转载,但请务必注明出处。
转载请注明原文地址: https://ju.6miu.com/read-663803.html