`

JavaScript微型模板系统

    博客分类:
  • js
阅读更多

由于后台模板系统的强大,如rails的erb,javascript的模板系统一直处于被打压状态,但又由于后台的技术发展 过快,日新月异,以及 Ajax应用的普及,javascript还是有一藉之地的。如我们要从后台返回一个HTML片断,但事实上我们永远只能返回文本(responseText)或responseXML,如果你得到是json,其实后台已稍稍调用javascript把它eval成json。

好了,既然我们知道它有用武之处,那么这模板系统的规模应多大呢?或者说,它应该有什么功能呢?问题 很简单,我们看一下那些后台模板系统就知了。后台模板发展了这么多年,非常成熟了。因此我们做的问题就是取舍。

 <table>
 <% foreach $topic in param.topic %>
  <tr class="topic">
    <td><%= $topic.renderLink() %></td>
    <td><%= $topic.creator.renderLink() %></td>
    <td>
    <% $count = topic.comments.count() - 1 %>
    <% if $count == 1 %>
      1 Post
    <% elseif $count > 1 %>
      <%= $count %> Posts
    <% else %>
    
    <% end %>
    </td>
    <td nowrap><%= $topic.createDate | format "dd.MM.yy - HH:mm" %></td>
  </tr>
 <% end %>
 </table>

这是网上找到一个示例,有分支,有循环,还有变量。像分支与循环,我觉得实现不应该与普通标签混在一起,貌似jsp mode1就是这个样子,很难维护。另外,我们也不得不注意一个问题,就是RSS。现在许多网站都支持订阅。如果前面是用以下方式设计会死得很惨:

<ul>
<!-- for(var i=0; i<supplies.length; i++) { //-->
 <li><!--= supplies[i] //--></li>
<li><!--= } //--></li>
</ul>

情况同现在我的博客用的语法高亮差不多。为了实现高亮,SyntaxHighlighter会把目标pre改成一个div,里面填充了许多设置了各种样式的span,于是我们就看到五颜六色。但在google Reader一看,javascript失效了。因此我们得出一个结论,前台的模板系统不应该在全页面范围使用。它只应处理那些临时生成的HTML片断。如Ajax提交的回复,这就省得刷新页面。

由于<% 与 %gt;与许多后台语言的模板系统发生冲突,直接用静态页面干活的日子不多了,因此我们就不能用这种格式了。我推荐使用rails的#{},括号里面是替换的东西。

下面是我的微型模板系统,比Ext还少。

  dom.Template = dom.factory({
      init:function(template, pattern){
          this.template = String(template);
          this.pattern = pattern || dom.Template.Pattern;
      },
      compile: function(object) {
          return this.template.replace(this.pattern, function(displace,variable){
              variable = dom.trim(variable)
              return displace = object[variable]
          });
      },
      statics:{Pattern:/#\{([^}]*)\}/mg}
  });

把它修改成能独立运行的代码,就是下面这个样子:

    var Template = function(template, pattern){
      this.template = String(template);
      this.pattern = pattern || Template.Pattern;
    }
    Template.Pattern = /#\{([^}]*)\}/mg;
    Template.trim = String.trim || function(str){
      return str.replace(/^\s+|\s+$/g, '')
    }
    Template.prototype ={
      constructor:Template,
      compile: function(object) {
        return this.template.replace(this.pattern, function(displace,variable){
          variable = Template.trim(variable)
          return displace = object[variable]
        });
      }
    }

使用:

   var data = "<div>Name: <b>#{name}</b>  Blog: <a href='#{href}'>#{blog }</a></div>";
    var t = new Template(data);
    var objs = {name:"司徒正美",
      blog:"RubyLouvre",
      href:"http://www.cnblogs.com/rubylouvre/"}
    var result = t.compile(objs);
    alert(result)

如你们所见,功能非常少,就是替换变量,实现格式与可变内容相分离。执行结果,我们可以用innerHTML把它添加到页面中。

分享到:
评论

相关推荐

    musty.js:基于小胡子语法JavaScript微型模板库

    musty.js-基于语法JavaScript微型模板库 特征 基于语法 小(〜1.2kb最小) 快速(将模板编译为可重用的功能) 没有依赖关系 符合ECMAScript 3(在IE6 +,FF4 +,Safari5 +,Chrome中测试) 支持用于格式化或子...

    基于Vue和JavaScript的微型医药商城系统设计源码

    本项目是一款基于Vue和JavaScript构建的微型医药商城系统源码,包含296个文件,涵盖了170个JPG图片、46个PNG图片、30个JavaScript文件、26个Vue文件、5个JSON文件、3个SVG文件、2个Babel配置文件、2个ICO图标文件、2...

    JavaScript模板引擎Velocity.js.zip

    Velocity.js 是velocity模板语法的javascript实现。Velocity 是基于Java的模板引擎,广泛应用在阿里集 体各个子公司。Velocity模板适用于大量模板使用的场景,支持复杂的逻辑运算,包含 基本数据类型、变量赋值和...

    简单的微型模板-JavaScript开发

    pupa简单的微型模板当您需要填写一些占位符时,此选项非常有用。 安装$ npm install --save pupa用法const pupa = require('pupa'); pupa('{name}的移动电话号码为pupa简单的微型模板,当您需要填写一些占位符时...

    dom一个用于嵌入式项目的微型510字节虚拟DOM模板引擎

    《微型510字节虚拟DOM模板引擎在嵌入式项目中的应用》 在现代Web开发中,虚拟DOM(Virtual DOM)技术已经成为提高性能和优化用户体验的重要工具。它通过抽象真实DOM来实现高效的UI更新,尤其在JavaScript框架中广泛...

    tiny-template-js:轻量级JavaScript模板引擎。 微型模板可帮助基于模板生成html文本

    Tiny Template JS-轻量级javascript模板库 Tiny Template JS(最小化1.4 KB)可帮助基于html模板或简单字符串生成html或任何其他格式的文本。 如果您需要在Javascript中使用模板化的文本或转发器,但又不想为该小...

    html-templating-js:使用最少的复制源代码开发 HTML 的微型模板引擎

    在 JavaScript 中,我们可以自定义微型模板引擎来满足轻量级的需求,就像“html-templating-js”项目所展示的那样。这个项目旨在通过最小的代码量实现高效的 HTML 渲染。 一、JavaScript 基础 JavaScript 是一种...

    介绍JavaScript的一个微型模版

    JavaScript微型模版是一种轻量级的模板引擎,它允许开发者在前端使用简单但功能强大的语法来构建动态网页。在本介绍中,我们将探讨一种特定的微型模板引擎,它由John Resig创建,并由《Secrets of the JavaScript ...

    记事狗微博系统模板 php版 v1.0.zip

    该模板可能包含了前端界面设计和后端功能实现,旨在帮助开发者快速搭建一个功能完备的微型博客系统。 在前端代码方面,这个模板可能包括HTML、CSS和JavaScript等技术的组合应用。HTML(HyperText Markup Language)...

    PHP写的微型个人博客,也是个人留言板

    4. 模板引擎:为了提高代码的可维护性和可扩展性,微型博客可能会采用模板引擎,如Twig或Smarty,将业务逻辑与视图层分离,使设计更清晰。 5. URL路由:良好的URL设计对于SEO(搜索引擎优化)至关重要。PHP可以通过...

    springboot微型商城 有后台管理

    5. **后台管理界面**:后台管理系统通常使用Thymeleaf、FreeMarker或Velocity等模板引擎,结合HTML、CSS和JavaScript来构建。这使得管理员可以直观地操作商品上架、订单处理、用户管理等功能。 6. **RESTful API...

    微型vue源码2021

    微型Vue源码可能会有解析模板的逻辑,将模板转化为渲染函数。 6. **实例化过程**:Vue实例的创建涉及到数据初始化、监听器设置、生命周期钩子调用等。微型Vue源码中会有`Vue`构造函数,用于创建实例并执行上述过程...

    wap企业微信官网首页模板

    【标签】"wap微模板"揭示了这个模板的核心技术特征,即基于WAP协议的微型网站设计。微模板通常包含精简的代码和组件,以便在有限的移动网络资源下快速加载,同时保持良好的视觉效果和功能性。 【压缩包子文件的文件...

    Django-微型Web项目开发与部署-体温登记系统

    在本项目中,我们将深入探讨如何使用Python的Django框架来开发一个微型Web项目——体温登记系统。Django是一个高效且强大的Web开发框架,它提供了许多内置功能和工具,可以帮助开发者快速构建安全、可扩展的Web应用...

    quickTemplate:一个非常轻巧的Angular样式模板的Node.JS微型模板引擎

    quickTemplate.js-使用Angular Notation的NodeJS应用程序的轻型微型模板引擎。 是一个快速的Node.js模板编译器,您可以在其中轻松使用Angular.JS表示法,也可以简单地指定您希望使用的表示法的类型。 有关此版本的...

    mimosa-html-templates:用于纯HTML微型模板的Mimosa 2.0模块

    该模块将在mimosa watch和mimosa build期间将纯HTML微型模板编译为可重用的javascript函数。 该模块利用了Mimosa基本模板编译器随附的所有内置模板行为。 有关如何处理模板的更多信息,请参见,或查看各种。 默认...

    pope:微型模板引擎仅适用于弦乐

    Pope是仅用于字符串的快速,最小且微型模板引擎,在您希望将微型模板嵌入模块内的地方,它发挥良好的作用。 从1.xx升级版本2.0.x进行了重大更改,其中pope不是默认导出,而是导出为对象上的属性。 较早 const ...

    微店WAP模板

    微店WAP模板是一种专为移动端设计的网页模板,它主要应用于创建微型在线商店的前端展示。这个模板基于HTML5技术,确保在各种移动设备上都能流畅运行,并提供良好的用户体验。HTML5是现代网页开发的标准,它引入了新...

    tript.js:一个微型的模板引擎,将HTML和纯JavaScript混合在一个模板中

    您可以使用 , 或其他模板引擎来完成,但是这次使用纯净而快速JavaScript。 演示版 前往codepen.io查看。 例子 &lt;!-- Embed tript.js --&gt; &lt; script src =" tript.min.js " &gt; &lt;/ script &gt; &lt;!--...

    dommit:微型模板引擎

    简单灵活的模板和视图绑定引擎,支持自定义绑定和模型更改的实时更新。 安装 使用npm通过 : $ npm install dommit 快速开始 渲染具有预定义数据模型的基本html模板。 var view = Dommit ( '&lt;p&gt;Hello {{name}}!...

Global site tag (gtag.js) - Google Analytics