`
wbj0110
  • 浏览: 1602907 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Javascript模板引擎

    博客分类:
  • Js
阅读更多

模板引擎的主要功能就是把变化的数据融入到不变的模板中,并生成最终结果。目前,前端的主要数据格式无非是XML和JSON。如何将这些数据更加方便的呈现呢?

最近看了很多的PHP模板引擎,今天看到了一个非常棒的Javascript模板引擎,用以更方便的呈现前台数据。它的一个超级简单的、快速的,高速缓存的,非常容易使用的模板引擎。

下面就来看下这个模板引擎是如何工作的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Simple JavaScript Templating
// John Resig - http://ejohn.org/ - MIT Licensed
(function(){
  var cache = {};
 
  this.tmpl = function tmpl(str, data){
    // 判断出我们是否获取一个模板或是否我们要加载一个模板并确定要缓存结果
    //Figure out if we're getting a template, or if we need to load the template - and be sure to cache the result.
 
    var fn = !/\W/.test(str) ?
      cache[str] = cache[str] ||
        tmpl(document.getElementById(str).innerHTML) :
 
      // 生成一个可作为模板的可重复使用的函数
      // 生成器 (将会被缓存)
      new Function("obj",
        "var p=[],print=function(){p.push.apply(p,arguments);};" +
 
        // 使用with(){} 作为局部变量引入数据
        "with(obj){p.push('" +
 
        // 将模板内容转化成JavaScript
        Convert the template into pure JavaScript
        str
          .replace(/[\r\t\n]/g, " ")
          .split("<%").join("\t")
          .replace(/((^|%>)[^\t]*)'/g, "$1\r")
          .replace(/\t=(.*?)%>/g, "',$1,'")
          .split("\t").join("');")
          .split("%>").join("p.push('")
          .split("\r").join("\\'")
      + "');}return p.join('');");
 
    // 提供一个基础的currying给用户
    return data ? fn( data ) : fn;
  };
})();

Currying 的意思为将原来的函数只可带一个参数列表以多个参数列表(注意不是多个参数)实现,如:def foo(x)(y)(z){}。

上面的只是具体实现的JS库,那到底怎么使用呢?

1
2
3
4
5
6
7
8
9
10
<script type="text/html" id="item_tmpl">
  <div id="<%=id%>" even" : "")%>">
    <div>
      <img src="<%=profile_image_url%>"/>
    </div>
    <div>
      <p><b><a href="/<%=from_user%>"><%=from_user%></a>:</b> <%=text%></p>
    </div>
  </div>
</script>

或是这样

1
2
3
4
5
<script type="text/html" id="user_tmpl">
  <% for ( var i = 0; i < users.length; i++ ) { %>
    <li><a href="<%=users[i].url%>"><%=users[i].name%></a></li>
  <% } %>
</script>

上面的使用代码中出现了一个特别的script内容类型text/html,这样的类型浏览器就不要去执行其中的内容,用户也就看不到其中的内容。这样就可以非常简单的把你想要的内容模板嵌入到你的页面中。这是一种快速的曲线救国的策略。

讲了这么多,那么怎么把数据给模板引擎呢,这还需使用Javascript来实现:

1
2
var results = document.getElementById("results");
results.innerHTML = tmpl("item_tmpl", dataObject);

同样的你可以预先编译好需要呈现的代码供后面的使用,如下面的循环:

1
2
3
var show_user = tmpl("item_tmpl"), html = "";
for ( var i = 0; i < users.length; i++ ) {
  html += show_user( users[i] );

以上就是全部代码,整个逻辑非常的清晰,就是把模板语言“编译”为Javascript的原生语法。这个引擎的优点在于:

  1. 可以使用任何Javascript支持的语法。
  2. Parse模板的过程在闭包内执行,不会产生全局变量。
  3. 对“编译”后的模板进行了缓存,下次可以跳过“编译”的过程直接使用。

最后大家还是要试一下才知道好不好用。

原代码地址:http://ejohn.org/blog/javascript-micro-templating/

分享到:
评论

相关推荐

    只有 20 行的 JavaScript 模板引擎实例详解

    在这个只有20行的JavaScript模板引擎实例中,我们将深入理解如何实现这一功能。 首先,模板引擎的核心任务是找到模板字符串中的标识片段,即`&lt;%...%&gt;`,并用提供的数据对象替换这些片段。在给定的代码中,使用了一...

    laytpl JavaScript模板引擎 V1.1

    laytpl是一款颠覆性的JavaScript模板引擎,它用巧妙的实现方式,将自身的体积变得小巧玲珑,不仅性能接近极致,并且还具备传统js引擎的几乎所有功能。所有的变身魔法都由不到2KB的代码创造,laytpl视图用最轻量的...

    基于jQuery开发的javascript模板引擎-jTemplates

    **基于jQuery开发的JavaScript模板引擎 - jTemplates** jTemplates是一个基于jQuery的JavaScript模板引擎,它允许开发者使用HTML模板来动态渲染数据,极大地提高了Web应用的界面更新效率和用户体验。通过将数据与...

    arttemplate高性能javascript模板引擎.docx

    ### artTemplate:高性能JavaScript模板引擎 #### 一、引言 随着Web技术的不断发展,前端应用日益复杂,JavaScript作为Web开发的重要组成部分,其作用愈发凸显。不仅在浏览器端发挥着核心作用,在服务器端(如Node...

    JavaScript模板引擎原理与用法详解.docx

    JavaScript模板引擎是一种在JavaScript中处理数据和HTML组合的工具,它的主要目的是将数据逻辑与页面展示分离,提高代码的可维护性和复用性。在Web开发中,它扮演着一个预处理器的角色,允许开发者编写类似于HTML的...

    JavaScript模板引擎 - Elapse

    JavaScript模板引擎Elapse是Web开发中的一个重要工具,它主要用于生成动态HTML内容,使得开发者能够将数据和视图逻辑分离,提高代码的可读性和可维护性。模板引擎的工作原理是通过解析预先定义好的模板语法,然后...

    laytpl-JavaScript模板引擎 v1.1

    laytpl是一款颠覆性的JavaScript模板引擎,它用巧妙的实现方式,将自身的体积变得小巧玲珑,不仅性能接近极致,并且还具备传统前端引擎的几乎所有功能。所有的变身魔法都由不到1KB的代码创造,这仿佛是一场革命,又...

    JavaScript模板引擎ECT.zip

    ECT是一个新兴的JavaScript模板引擎,主要致力于性能表现。 ECT开发者称,与其他引擎(如Dust、Hogan.js、Fest、Handlebars.js、doT、Swig、Eco、EJS、CoffeeKup和Jade等)相比,ECT目前是最快的,见基准测试。你...

    laytpl-JavaScript模板引擎 v1.1-源码.zip

    总的来说,laytpl-JavaScript模板引擎v1.1的源码分析能够让我们深入理解前端模板引擎的内部运作,提升JavaScript开发技能,同时也为我们提供了自定义和优化模板引擎的可能性。通过阅读和学习源码,开发者可以更好地...

    PowJS基于DOMTree的JavaScript模板引擎

    PowJS与其他JavaScript模板引擎(如Handlebars、EJS、Mustache等)相比,其特色在于DOM Tree的直接操作,这可能会提供更快的渲染速度和更好的浏览器兼容性。然而,每个模板引擎都有其适用场景,选择哪种引擎应根据...

    laytpl-JavaScript模板引擎 v1.1.zip

    尽管这个版本相对早期,但对于小型项目和学习JavaScript模板引擎的原理来说,它仍然是一个很好的选择。 在实际应用中,laytpl常常与Ajax请求配合使用,获取服务器端的数据,然后用这些数据渲染页面。这使得前端可以...

    Tempos高效的Javascript模板引擎

    Tempos是一款高效的JavaScript模板引擎,专为前端开发者设计,用于快速构建动态HTML页面。在Web开发中,模板引擎扮演着至关重要的角色,它允许开发者将数据和视图逻辑分离,使得代码更加模块化,更易于维护。Tempos...

    templatejs的fis编译插件一款javascript模板引擎

    Template.js就是这样一个JavaScript模板引擎,它被设计用来帮助开发者快速、高效地实现动态内容的展示。 **template.js介绍** template.js是一款轻量级的JavaScript模板引擎,它提供了简洁的语法和高效的执行效率...

    Javascript模板引擎surge.js.zip

    Surge.js 是新的示例,更快的 Javascript 模板引擎,语法跟 Liquid 和 Django template一样 。Surge.js 会解析 Html 模板中的 JavaScript 函数,编译的函数会被缓存。教程速度测试 V8 Javascript engine 的测试...

    templatejs的webpakc编译loader一款javascript模板引擎

    Template.js作为JavaScript模板引擎,具有以下优点: - **简洁的语法**:它的模板语法简单直观,易于学习和使用。 - **高效性能**:通过预编译模板为JavaScript函数,可以在运行时快速生成HTML,提高页面渲染速度。 ...

    Hoganjs来自Twitter的JavaScript模板引擎

    Hogan.js是一个由Twitter开发的轻量级JavaScript模板引擎,它是对Mustache模板语言的实现。这个库的主要目的是为了提供一种高效且易于理解和使用的数据绑定和逻辑表达方式,用于生成HTML或其他格式的文本。在前端...

    laytpl是一款非常轻量的JavaScript模板引擎

    总结来说,laytpl是一款以简洁和高性能为特点的JavaScript模板引擎,它遵循原生JS语法,易于学习和使用。在前端开发中,laytpl可以帮助我们高效地实现数据和视图的动态绑定,提升开发效率,是构建响应式Web应用的一...

    JavaScript模板引擎Nunjucks.zip

    Nunjucks 是一个更复杂的 JavaScript 模板引擎,提供丰富的语言特性和块继承、自动转移、宏和异步控制等等。示例代码:{% extends "base.html" %} {% block header %} &lt;h1&gt;{{ title }} {% endblock %...

Global site tag (gtag.js) - Google Analytics