1. 程式人生 > >前端javaScript模板引擎之ArtTemplate

前端javaScript模板引擎之ArtTemplate

一、簡介

      ArtTemplate是騰訊開發的一款使用方便、效能卓越javascript模板引擎,其渲染效率極其快。ArtTemplate的庫分為兩種,一個是template.js,這個是簡單的語法版本。另一個是template-native.js,是原生的語法版本;,兩個庫的語法不可混用,否則會出錯。本文主要講解簡單的語法版本。

二、原理

三、特性

      1.效能卓越,執行速度通常是Mustache與tmpl的20多倍(效能測試)

      2.支援執行時除錯,可精確定位異常模板所在語句(演示)

      3.對NodeJS Express友好支援

      4.安全,預設對輸出進行轉義,在沙箱中執行編譯後的程式碼(Node版本可以安全執行使用者上傳的模板)

      5.支援include語句,可匯入定義的其它模組

      6.可在瀏覽器端實現按路徑載入模板(詳情)

      7.支援預編譯,可將模板轉換成為非常精簡的js檔案

      8.模板語句簡潔,無需字首引用資料,有簡潔版本與原生語法版本可選

      9.支援所有流行的瀏覽器

     10.豐富的自定義配置

     11.支援資料過濾

     12.異常捕獲功能

四、使用方法(簡介版語法)

       1.if--else語法

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>if -- else</title>
    <meta charset="UTF-8">
    <script type="text/javascript" src="../../static/template.js"></script>
</head>
<body>
<div id="app"></div>
<script type="text/html" id="test">
    {{if isAdmin}}
    姓名:<span>{{admin.name}}</span><br>
    性別:<span>{{admin.sex}}</span><br>
    職務:<span>{{admin.position}}</span>
    {{else}}
    姓名:<span>{{staff.name}}</span><br>
    性別:<span>{{staff.sex}}</span><br>
    職務:<span>{{staff.position}}</span>
    {{/if}}
</script>
<script type="text/javascript">
    data = {
        isAdmin: true,
        admin: {name: '張三', sex: '男', position: "部門經理"},
        staff: {name: '李四', sex: '男', position: "普通員工"}
    }
   var  html = template('test',data);
    document.getElementById("app").innerHTML = html;
</script>
</body>
</html>

        2.each

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>each</title>
    <meta charset="UTF-8">
    <script type="text/javascript" src="../../static/template.js"></script>
</head>
<body>
<div id="app"></div>
<script type="text/html" id="test">
  {{if isAdmin}}
    <h1>{{title}}</h1>
  {{each list as value index}}
    <ul>
        <li>{{index + 1}} : {{value}}</li>
    </ul>
  {{/each}}
    {{/if}}
</script>
<script type="text/javascript">
    var data = {
        isAdmin:true,
        title:'球類運動',
        list:['足球','籃球','排球','棒球','網球','羽毛球','乒乓球']
    }
    var html = template('test',data);
    document.getElementById('app').innerHTML = html;
</script>
</body>
</html>

         3.轉義

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta charset="UTF-8">
    <title>轉義</title>
    <script type="text/javascript" src="../static/template.js"></script>
</head>
<body>
<h1>不轉義HTML</h1>
<div id="content"></div>
<script type="text/html" id="test">
<p>不轉義:{{#value}}</p>
<p>預設轉義:{{value}}</p>
</script>
<script type="text/javascript">
    var data = {
        value:'<span style="color: green">hello world</span>'
    };
    var html = template('test',data);
    document.getElementById('content').innerHTML = html;
</script>
</body>
</html>

        4.巢狀

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>include</title>
    <meta charset="UTF-8">
    <script type="text/javascript" src="../../static/template.js"></script>
</head>
<body>
<div id="app"></div>
<script type="text/html" id="topicPart">
    <h1>題目:{{topic}}</h1>
    <ul>
        {{each optionList as value index}}
        <li>{{value.ind}} . {{value.val}}</li>
        {{/each}}
    </ul>
    {{include 'anserPart'}}
</script>
<script type="text/html" id = "anserPart">
    <span>參考答案:{{anser}}</span>
</script>
<script type="text/javascript">
   var  data = {
       topic:'1+1=?',
       optionList:[
           {ind:'A',val:2},
           {ind:'B',val:1},
           {ind:'C',val:3},
           {ind:'D',val:4},
       ],
       anser:"A"
   }
   var html = template("topicPart",data);
   document.getElementById("app").innerHTML = html;
</script>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta charset="UTF-8">
    <title>test template</title>
    <script type="text/javascript" src="../static/template.js"></script>
</head>
<body>
<div id="app"></div>
<script type="text/html" id="main">
<ul>
    {{each list}}
    <li>{{$value}}</li>
    {{/each}}
</ul>
</script>
<script type="text/html" id="test">
<div>
    <ul>
        {{each person}}
        <li>{{$value.name}}</li>
        {{/each}}
    </ul>
    {{include 'main' a}}
</div>
</script>
<script type="text/javascript">
    var data = {
        person:[
            {name:"jack",age:18,sex:1},
            {name:"tom",age:19,sex:0},
            {name:"jerry",age:20,sex:0},
            {name:"kid",age:21,sex:1},
            {name:"jade",age:22,sex:0},
            {name:"lrving",age:23,sex:1},
        ],
        a:{
            list:['足球','籃球','排球','棒球','網球','羽毛球','乒乓球']
        }
    };
    var html = template('test',data);
    document.getElementById('app').innerHTML = html;
</script>
</body>
</html>

        5.自定義函式

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>自定義函式</title>
    <meta charset="UTF-8">
    <script type="text/javascript" src="../../static/template.js"></script>
</head>
<body>
<div id="app"></div>
<script type="text/html" id="test">
    {{if isAdmin}}
    姓名:<span>{{admin.name}}</span><br>
    性別:<span>{{getSex(admin.sex)}}</span><br>
    職務:<span>{{admin.position}}</span>
    {{else}}
    姓名:<span>{{staff.name}}</span><br>
    性別:<span>{{getSex(staff.sex)}}</span><br>
    職務:<span>{{staff.position}}</span>
    {{/if}}
</script>
<script type="text/javascript">
    template.helper('getSex',function (sex) {
        if(1 == sex){
            return '男';
        }else if(0 == sex){
            return '女';
        }
    })
    data = {
        isAdmin: true,
        admin: {name: '張三', sex: '1', position: "部門經理"},
        staff: {name: '李四', sex: '0', position: "普通員工"}
    }
   var  html = template('test',data);
    document.getElementById("app").innerHTML = html;
</script>
</body>
</html>

  五、總結

        這裡只是簡單的介紹了ArtTemplate的基本用法,更深入的用法,希望各位在使用的過程中,進行深入的學習,下一篇文章,會介紹阿里開發的javaScript引擎模板Velocity。