zoukankan      html  css  js  c++  java
  • 前端模板引擎artTemplate.js

    .

    关于artTemplate模板引擎的详细原理请移步高性能JavaScript模板引擎原理解析,本文只探讨如何使用。初学前端的人一般对于绑定数据都是使用原生js或者jquery来拼接字符串,此为hardcode,而且拼接的过程很头疼,什么单引号双引号,符号嵌入多了就头晕眼花容易出错,如果会调试的话可以看到渲染模板的效率也很低下。本文将介绍一种新的利用模板引擎来渲染数据的方法。

    (1)artTemplate基础使用方法
    一:简洁语法版
    <!DOCTYPE html>
    <html>
    <head>
    <title>demo1</title>
    <script type="text/javascript" src="js/template-web.js"></script>
    </head>
    <body>
    <div id="content"></div>
    <script id="test" type="text/html">
    {{if isAdmin}}
    <h1>{{title}}</h1>
    <ul>
    {{each list 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>

    二:原生语法版
    原生语法就是定义模板的js格式不一样,有点像jsp的语法,不过我个人建议使用简洁版,以为没有这么多的符号,方便哈。

    <script id="test" type="text/html">
    <%if(isAdmin){%>
    <% for(var i=0; i<list.length; i++){%>
    <div><%=i%>:<%=list[i]%></div>
    <%}%>
    <%}else{%>
    <div>没有结果!</div>
    <%}%>
    </script>

    (2)artTemplate模板定义方式
    一:javascript定义html模板
    这种方法如上<script id="test" type="text/html"> 这里的type必须为”text/html”, 必须定义id。

    二:用变量的形式存储模板
    <!DOCTYPE html>
    <html>
    <head>
    <title>demo2</title>
    <script type="text/javascript" src="js/template-web.js"></script>
    </head>
    <body>
    <div id="content"></div>
    <script>
    var source = '<ul>'
    + '{{each list value i}}'
    + '<li>索引 {{i + 1}} :{{value}}</li>'
    + '{{/each}}'
    + '</ul>';
    var render = template.compile(source);
    var html = render({
    list: ['摄影', '电影', '民谣', '旅行', '吉他']
    });
    document.getElementById('content').innerHTML = html;
    </script>
    </body>
    </html>

    这里又出现了讨厌的字符串拼接,所以我又不喜欢了,还是建议用第一种方式。

    (3)ajax结合artTemplate模板
    假设可以通过/test.php 获取json数据,数据如下:

    {
    result:[
    {
    id:1,
    name: 'zhangsan'
    },
    {
    id:2,
    name: 'lisi'
    },
    ],
    error_code:"200"
    }

    需要数据绑定到html页面:

    <div id="content"><div>
    1
    javascript定义模板:

    <script id="search" type="text/html">
    <ul>
    {{each result value i}}
    <li>name{{i+1}}:{{value.name}}</li>
    {{/each}}
    </ul>
    </script>

    ajax请求数据的方式为:

    $.ajax({
    type: 'post',
    url:'/test.php',
    success: function(res){
    var result = res.result;
    var $html = template("search",result);
    $("#content").html($html);
    }
    });

    以下为基础语法:

    变量
    标准语法{{set temp = data.sub.content}}
    原生语法<% var temp = data.sub.content; %>

    自定义过滤器filter
    注册过滤器

    template.defaults.imports.dateFormat = function(date, format){/*[code..]*/};
    template.defaults.imports.timestamp = function(value){return value * 1000};
    1
    2
    标准语法:

    {{date | timestamp | dateFormat 'yyyy-MM-dd hh:mm:ss'}}
    1
    原生语法:

    <%= $imports.dateFormat($imports.timestamp(date), 'yyyy-MM-dd hh:mm:ss') %>
    1
    子模板
    标准语法:

    {{include './header.art'}}
    {{include './header.art' data}}
    1
    2
    原生语法:

    <% include('./header.art') %>
    <% include('./header.art', data) %>
    1
    2
    模板继承
    标准语法:

    {{extend './layout.art'}}
    {{block 'head'}} ... {{/block}}

    原生语法:

    <% extend('./layout.art') %>
    <% block('head', function(){ %> ... <% }) %>

    模板继承允许你构建一个包含你站点共同元素的基本模板“骨架”。范例:

    <!--layout.art-->
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>{{block 'title'}}My Site{{/block}}</title>
    {{block 'head'}}
    <link rel="stylesheet" href="main.css">
    {{/block}}
    </head>
    <body>
    {{block 'content'}}{{/block}}
    </body>
    </html>

    <!--index.art-->
    {{extend './layout.art'}}
    {{block 'title'}}{{title}}{{/block}}
    {{block 'head'}}
    <link rel="stylesheet" href="custom.css">
    {{/block}}
    {{block 'content'}}
    <p>This is just an awesome page.</p>
    {{/block}}

    渲染 index.art 后,将自动应用布局骨架。

    其他文档详见:art-template官方文档

  • 相关阅读:
    MongoDB分页处理方案(适用于一般数据库的分页方法)
    linux java cpu 100%
    ueditor
    mysql深入,nginx原理
    spring mvc ajax file upload
    shiro session timeout ajax
    spring 源码解析 pdf
    linux下Nginx+tomcat整合的安装与配置
    Mac 环境下搭建Nginx + Tomcat集群
    easymock 搭建
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/11914424.html
Copyright © 2011-2022 走看看