Mustache.js模板引擎使用

应用场景

最近项目中用到了mustache.js,这是一款模板引擎,可以将html结构和数据进行合并。主要应用场景是服务器端返回数据,然后前端根据返回的数据渲染页面,进行展示。主要2个需求:一是根据数组类型的数据,展示列表,二是根据具体的数据值,展示或者不展示某一功能模块以及添加不同样式。

举例子


<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>Documenttitle>
    <style>
        .item1_span1,
        .item1_span2 {
            color: black;
        }

        .item2_span1,
        .item2_span2 {
            color: blue;
        }

        .item3_span1,
        .item3_span2 {
            color: yellow;
        }
    style>

    <script src="https://cdn.bootcss.com/mustache.js/2.3.0/mustache.js">script>
head>

<body>
    <div id="root">div>

    <script>
        var template = '
' + ' {{#title}}' + '

{{t}}</h1>' + ' {{/title}}' + '
    ' + ' {{#items}}' + '
  • class="item">' + ' class="{{item_span1}}">{{content1}}</span>' + ' {{item_span2}}">{{content2}}</span>' + ' li>' + ' {{/items}}' + ' </ul>' + ' {{#end1}}' + '

    这是结尾1</p>' + ' {{/end1}}' + ' {{#end2}}' + '

    这是结尾2</p>' + ' {{/end2}}' + ' {{^end3}}' + '

    这是结尾3</p>' + ' {{/end3}}' + ' {{^end4}}' + '

    这是结尾4</p>' + ' {{/end4}}' + ' </div>'; // 设置输入变量,可以根据不同值拼接不同的数据 var g_input1 = true; // 根据某个变量输出不同的html内容 var get_output = function () { if (g_input1) { g_input1 = false; return 'g_input1为true'; } else { g_input1 = true; return 'g_input1为false'; } }; // 数据 var data = { // title对应{{#title}}{{/title}}这个固定写法,名字可以随意更改,t为这个写法里面包裹的{{--}}变量,模板引擎会将数据和模板合并 title: { t: '这是一个标题' }, // 如果items的值写成数组格式,模板引擎可以根据添加的数据条数渲染不同的html items: [{ item_span1: 'item1_span1', // 可以将类名设置为数据变量,继而产生不同的页面效果 item_span2: 'item1_span2', content1: '这是第一条消息1', content2: '这是第一条消息2', }, { item_span1: 'item2_span1', item_span2: 'item2_span2', content1: '这是第二条消息1', content2: get_output, // 这里可以写函数或者表达式,根据变量灵活决定数据值 }, { item_span1: 'item3_span1', item_span2: 'item3_span2', content1: '这是第三条消息1', content2: get_output, } ], end1: null, // {{#end1}}{{/end1}}标签中的end1为false或者null或者空字符串等情况时,end1结尾不显示 end2: true, // end2为true或者{a:1,b:2}等有值情况下,end2标签中间的内容显示 end3: null, // {{^end1}}{{/end1}}的写法与上面刚好相反,为false显示,为true显示 end4: true, }; Mustache.parse(template); // 预编译模板 var html_str = Mustache.render(template, data); // 将模板和数据合并,返回字符串类型的html document.getElementById('root').innerHTML = html_str; script> body> html>

你可能感兴趣的:(日常总结)