A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



【简介】
template.js 一款 JavaScript模板引擎,简单,好用。提供一套模板语法,用户可以写一个模板区块,每次根据传入的数据,生成对应数据产生的HTML片段,渲染不同的效果。
分为原生语法和简洁语法,本文主要是讲简洁语法。
【语法】
1.使用
引用简洁语法的引擎版本,例如: <script src="dist/template.js"></script>  
2. 表达式
{{ }} 符号包裹起来的语句则为模板的逻辑表达式。
3. 输出表达式
对内容编码输出: {{content}}  
不编码输出: {{#content}}  
编码可以防止数据中含有 HTML 字符串,避免引起 XSS 攻击。
示例
[JavaScript] 纯文本查看 复制代码
<div id="demo"></div>

         <script type="text/html" id="demo_tmpl">

             {{content}}

         </script>

         <script src="./js/template.js" type="text/javascript" charset="utf-8"></script>

         <script type="text/javascript">

             var obj = {

                 content: "<h1>哈哈</h1>"

             };

             document.getElementById("demo").innerHTML = template("demo_tmpl", obj);

         </script>
效果
如果上面的模板修改为
[JavaScript] 纯文本查看 复制代码
<script type="text/html" id="demo_tmpl">

             {{#content}}

</script>
则效果为:
4. 条件表达式
[JavaScript] 纯文本查看 复制代码
{{if admin}}

 <p>admin</p>

{{else if code > 0}}

 <p>master</p>

{{else}}

 <p>error!</p>

{{/if}}
5. 遍历表达式
无论数组或者对象都可以用 each 进行遍历。
[JavaScript] 纯文本查看 复制代码
{{each list as value index}}

 <li>{{index}} - {{value.user}}</li>

{{/each}}

亦可以被简写:

{{each list}}

 <li>{{$index}} - {{$value.user}}</li>

{{/each}}
6. 辅助方法
使用template.helper(name,callback)注册公用辅助方法:
template.helper('dateFormat', function(date, format) {
//..
return value;
});
模板中使用的方式: {{time | dateFormat:'yyyy-MM-dd hh:mm:ss'}}  
支持传入参数与嵌套使用: {{time | say:'cd' | ubb | link}}
【示例一】
常规的遍历数组
[HTML] 纯文本查看 复制代码
<!DOCTYPE HTML>

<html>

<head>

<meta charset="UTF-8">

<title>basic-demo</title>

<script src="../dist/template.js"></script>

</head>

<body>

<div id="content"></div>

<script id="test" type="text/html">

{{if isAdmin}}

<h1>{{title}}</h1>

<ul>

 {{each list as value i}}

  <li>索引 {{i + 1}} :{{value}}</li>

 {{/each}}

</ul>

{{/if}}

</script>

<script>

var data = {

 title: '基本例子',

 isAdmin: true,

 list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']

};

var html = template('test', data);

document.getElementById('content').innerHTML = html;

</script>

</body>

</html>
【效果一】
【效果二】
使用子模板
[HTML] 纯文本查看 复制代码
<!DOCTYPE HTML>

<html>

<head>

<meta charset="UTF-8">

<title>include-demo</title>

<script src="../dist/template.js"></script>

</head>

 

<body>

<div id="content"></div>

<script id="test" type="text/html">

<h1>{{title}}</h1>

{{include 'list'}}

</script>

<script id="list" type="text/html">

<ul>

 {{each list as value i}}

  <li>索引 {{i + 1}} :{{value}}</li>

 {{/each}}

</ul>

</script>

 

<script>

var data = {

 title: '嵌入子模板',

 list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']

};

var html = template('test', data);

document.getElementById('content').innerHTML = html;

</script>

</body>

</html>
【效果二】
【示例三】
template.helper的使用
[HTML] 纯文本查看 复制代码
<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <meta http-equiv="X-UA-Compatible" content="ie=edge">

  <title>template.helper</title>

</head>

<body>

<!--数据容器-->

<div id="content"></div>

 

<script id="test" type="text/html">

    {{time | dateFormat:'yyyy年 MM月 dd日 hh:mm:ss'}}

</script>

 

<script src="./js/template.js"></script>

<script>

 

template.helper('dateFormat', function (date, format) {

 

    date = new Date(date); //新建日期对象

 

    /*日期字典*/

    var map = {

        "M": date.getMonth() + 1, //月份

        "d": date.getDate(), //日

        "h": date.getHours(), //小时

        "m": date.getMinutes(), //分

        "s": date.getSeconds(), //秒

        "q": Math.floor((date.getMonth() + 3) / 3), //季度

        "S": date.getMilliseconds() //毫秒

    };

 

    /*正则替换*/

    format = format.replace(/([yMdhmsqS])+/g, function(all, t){

        var v = map[t];

        if(v !== undefined){

            if(all.length > 1){

                v = '0' + v;

                v = v.substr(v.length-2);

            }

            return v;

        }

        else if(t === 'y'){

            return (date.getFullYear() + '').substr(4 - all.length);

        }

        return all;

    });

 

    /*返回自身*/

    return format;

});

 

/*数据*/

var data = {

    time: (new Date).toString(),

};

/*渲染*/

var html = template('test', data);

/*绑定*/

document.getElementById('content').innerHTML = html;

 

</script>

</body>

</html>
【效果三】

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马