如何優雅的把后台數據(通常是JSON)輕松渲染到html頁面


如何優雅的把后台數據(通常是JSON)輕松渲染到html頁面

在我們做前后端分離的時候,都有遇到過一些看起卡很簡答,確無從下手的問題把。比方說后台給了前端一個list集合,集合里面有很多學生,我們現在要對這些學生在前端渲染展示。我們怎么辦?

當然如果你是使用了強大的框架,完全不必要在意這些問題了。

但是當我們啥都沒有的時候,我們可以考慮使用handlerbars這款強大的工具。可以非常輕松,侵入化很小,快捷的實現數據到頁面的渲染。

1. 模板引擎handlerbars

- 官方網站:http://handlebarsjs.com/
- handlerbars簡介:是一個純js的庫,主要功能通過對view和data的分離來快速構建Web模板,可以很方便簡潔的使用
- 語法超級簡單 {{key}},通過兩個花括號包起來,更多語法參考官方文檔[【官方文檔】](http://handlebarsjs.com/guide/#what-is-handlebars)

2. 效果展示

3. 最簡單的使用demo

  1. 准備個測試頁面,頁面引入handlebars.js
    • 引入handlerbars.js
    • 找個表格演示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- //todo 2 我們找個表格演示下 -->
    <!-- <h3>學生信息表</h3> -->
    <table width="500" align="center" cellspacing="0" cellpadding="6">
        <caption>學生信息表</caption>
        <thead>
            <tr align="center">
                <td>姓名</td>
                <td>性別</td>
                <td>芳齡</td>
                <td>班級</td>
                <td>備注</td>
            </tr>
        </thead>
        <tbody>
            <!--//todo 表格內容使用模板渲染 -->
        </tbody>
    </table>
    
    <!--//todo 1 引入handlerbars工具 -->
    <script src="./js/handlebars.js"></script>
</body>
</html>
  1. 模擬后台的數據,假設后台返回了一個學生列表,如下(student)
var student = [
        {name: '魯班七號', gender: '未知', age: '20', class: '一年級射手班', note: '智商二百五的電玩小子,biubiubiu,就是腿短!'},
        {name: '安琪拉', gender: '女', age: '18', class: '一年級法師班', note: '什么什么魔法書!'},
        {name: '程咬金', gender: '男', age: '30', class: '一年級二班', note: '愛與正義之斧,偷偷推到'},
        {name: '阿珂', gender: '女', age: '19', class: '三年級刺客班', note: '哪里亮了點哪里,都是我的人頭!'},
        {name: '李白', gender: '男', age: '20', class: '一年級酒酒仙班', note: '但願長醉不願醒,我是來無影去無蹤,帥!'},
        {name: '森瑤', gender: '女', age: '20', class: '皮膚班級', note: '不然夢會碎還是破!'}
    ]
  1. 定義模板,注意type="text/x-handlebars-template"必須這樣寫
    <!--//todo 表格內容使用模板渲染 -->
    <script type="text/x-handlebars-template" id="template">
        {{#each this}}

        <tr align="center">
            <td>{{name}}</td>
            <td>{{gender}}</td>
            <td>{{age}}</td>
            <td>{{classes}}</td>
            <td>{{note}}</td>
        </tr>

        {{/each}}
    </script>
  1. 渲染數據
        //獲取需要放數據的容器
        var container = document.querySelector('#container');
        //也就是獲取我們定義的模板的dom對象。主要是想獲取里面的內容(innerHTML)
        var templateDom = document.querySelector('#template');
        //編譯模板的里的內容
        var template = Handlebars.compile(templateDom.innerHTML);
        //把后台獲取到的數據student渲染到頁面
        container.innerHTML = template(student);

4. 附上完整代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"">
    <title>m-web</title>
</head>
<body>
    

    <!-- <h3>學生信息表</h3> -->
    <table border="1" width="700" align="center" cellspacing="0" cellpadding="6">
        <caption>學生信息表</caption>
        <thead>
            <tr align="left">
                <td>姓名</td>
                <td>性別</td>
                <td>芳齡</td>
                <td>班級</td>
                <td>備注</td>
            </tr>
        </thead>
        <tbody id="container">
            <!--//todo 表格內容使用模板渲染 -->
            <script type="text/x-handlebars-template" id="template">
                {{#each this}}

                <tr align="left">
                    <td>{{name}}</td>
                    <td>{{gender}}</td>
                    <td>{{age}}</td>
                    <td>{{classes}}</td>
                    <td>{{note}}</td>
                </tr>

                {{/each}}
            </script>
        </tbody>
    </table>

    <script src="./js/handlebars.js"></script>
    <script>
        var student = [
            {name: '魯班七號', gender: '未知', age: '20', classes: '一年級射手班', note: '智商二百五的電玩小子,biubiubiu,就是腿短!'},
            {name: '安琪拉', gender: '女', age: '18', classes: '一年級法師班', note: '什么什么魔法書!'},
            {name: '程咬金', gender: '男', age: '30', classes: '一年級二班', note: '愛與正義之斧,偷偷推到'},
            {name: '阿珂', gender: '女', age: '19', classes: '三年級刺客班', note: '哪里亮了點哪里,都是我的人頭!'},
            {name: '李白', gender: '男', age: '20', classes: '一年級酒酒仙班', note: '但願長醉不願醒,我是來無影去無蹤,帥!'},
            {name: '森瑤', gender: '女', age: '20', classes: '皮膚班級', note: '不然夢會碎還是破!'}
        ]
        
        //獲取需要放數據的容器
        var container = document.querySelector('#container');
        //也就是獲取我們定義的模板的dom對象。主要是想獲取里面的內容(innerHTML)
        var templateDom = document.querySelector('#template');
        //編譯模板的里的內容
        var template = Handlebars.compile(templateDom.innerHTML);
        //把后台獲取到的數據student渲染到頁面
        container.innerHTML = template(student);
    </script>
</body>
</html>

官方說明文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM