在SeaJS中实现html模板文件的加载(Temod介绍)

标签: seajs html 模板 | 发表时间:2011-07-01 15:58 | 作者:T2噬菌体 LiuWeifeng
出处:http://www.cnblogs.com/leoo2sk/

几天前的一篇文章中,我介绍了JavaScript的模块化加载框架SeaJS。目前SeaJS支持js和css的模块化加载。在实际应用中,可能会遇到需要加载html页面模板文件的场景,例如我接触的某些应用使用Template Toolkit(以下简称TT)写页面模板,然后由js载入TT模板后渲染输出,在这种纯JavaScript渲染的Web架构中,需要将tt文件(或其它格式html模板文件)作为模块载入。

实现这一点的基本的方法是将tt文件内容看做一个长字符串,然后封装为纯Json格式的模块:

define({
    html: '<div>html</div>' //原html模板文件代码
});

由于JavaScript不支持类似于php heredoc那样的长字符串写法,所以手工做这种转换会比较纠结,而且还要处理特殊字符转义、html压缩等繁琐事情,当模板文件比较多时全手工实现费时费力还容易出错。所以我写了一个小工具temod,temod可以将html或tt等页面模板文件编译成符合CommonJS规范的module,这样任何实现了CommonJS规范的模块加载框架(如SeaJS)就可以将编译好的文件作为普通模板加载进来。

Temod目前托管在GitHub上,访问地址是:https://github.com/ericzy/temod

Temod使用简介

获取temod

获取temod有两种方式,一是通过Git获取整个temod git repository:

git clone https://github.com/ericzy/temod.git

或者也可以通过这个地址直接下载temod.js脚本:https://raw.github.com/ericzy/temod/master/bin/temod.js。例如在linux下可以通过wget获取:

wget https://raw.github.com/ericzy/temod/master/bin/temod.js

运行temod

Temod程序只有一个temod.js,这个脚本使用NodeJS写成,不需要任何安装,直接使用NodeJS执行即可:

node temod.js path/to/template/directory [option]

temod.js的第一个参数为必须参数,是模板文件所在目录,可选参数option有如下几个:

--compress=on|off —— 是否开启html代码压缩。如果设为on,则temod会将整个模板文件压缩成一个不换行字符串;如果设为off,则会将模板文件中每一行转为一个字符串,这些字符串组成数组,通过join输出页面,保持所有html代码格式。一般来说,前者节省带宽,而后者传给客户端的html源代码可读性更好。默认开启压缩。

--encoding=utf-8 —— 模板文件和输出文件的编码,默认为utf-8。

--ext=htm,html,tt,tpl,… —— 模板文件扩展名。这个选项指定了所有模板文件的扩展名,如果文件在模板文件目录里但不包含指定的扩展名,则不会被编译。多个扩展名之间用英文逗号隔开。默认为htm,html,tt,tpl。

temod会自动遍历指定的模板目录,生成一个与其结构一致的目录,名称为原目录名加“_build”,其中包含了所有编译好的文件,文件名为源文件名加“.js”。

Temod使用示例

下面给一个temod的使用示例。

image

如上图所示,其中bin下放着temod.js,例子放在example下。example目录内部如下:

image

刚开始没有template_build,这是一个编译生成的目录。其中template下放有一个模板文件content.tt:

<div>
    <p>This is a Temod Sample.</p>
    <p><a href="https://github.com/ericzy/temod">Click here to visit home page</a></p>
</div>

现在到bin目录下运行如下命令:

node temod.js ../example/template --compress=on --ext=tt --encoding=utf-8

或者省略默认参数也可以:

node temod.js ../example/template

这会在example下生成template_build目录,里面有个content.tt.js文件,内容如下:

//This file was generated by temod (https://github.com/ericy/temod)

define({html: '<div><p>This is a Temod Sample.</p><p><a href="https://github.com/ericzy/temod">Click here to visit home page</a></p></div>'});

然后我们在js下写一个init.js模块,在这个模块中加载这个模板并做一些渲染操作:

define(function(require, exports, module) {
    var tpl = require('../template_build/content.tt');

    document.body.innerHTML = tpl.html;
});

最后在index.html中将init作为入口模块:

<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Temod Sample</title>
</head>
<body>

<script src="./js/sea.js" data-main="./js/init"></script>
</body>
</html>

访问index.html,则可看到如下效果:

image

如果不了解SeaJS,请看这篇文章:http://www.cnblogs.com/leoo2sk/archive/2011/06/27/write-javascript-with-seajs.html

需要这个例子的完整代码可以访问https://github.com/ericzy/temod/tree/master/example

作者: T2噬菌体 发表于 2011-07-01 15:58 原文链接

评论: 2 查看评论 发表评论


最新新闻:
· 美国法院驳回针对微软和雅虎的反垄断诉讼(2011-08-27 09:41)
· Windows 8:两款采用Metro UI界面的新应用(2011-08-27 09:39)
· 诺基亚手机应用竞赛耗资千万美元(2011-08-27 09:37)
· 2011年必须看的20多个新鲜和实用的jQuery插件(2011-08-27 09:36)
· Facebook将停止运营团购服务Facebook Deals(2011-08-27 09:36)

编辑推荐:你会做Web上的用户登录功能吗?

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [seajs html 模板] 推荐:

在SeaJS中实现html模板文件的加载(Temod介绍)

- LiuWeifeng - 博客园-EricZhang&#39;s Technology Blog
在几天前的一篇文章中,我介绍了JavaScript的模块化加载框架SeaJS. 目前SeaJS支持js和css的模块化加载. 在实际应用中,可能会遇到需要加载html页面模板文件的场景,例如我接触的某些应用使用Template Toolkit(以下简称TT)写页面模板,然后由js载入TT模板后渲染输出,在这种纯JavaScript渲染的Web架构中,需要将tt文件(或其它格式html模板文件)作为模块载入.

SeaJS 和 RequireJS 的异同

- Pjan - 岁月如歌
相同点是:要解决的问题相同,都是浏览器端的模块化开发,目标一致. RequireJS 遵循的是 Modules/AMD 规范. SeaJS 遵循的是 Mdoules/Wrappings 规范的 define 形式. AMD 规范在 CommonJS 社区争议很大,规范里太多 RequireJS 的影子.

分享45款高质量的免费(X)HTML/CSS模板

- Mikel - 博客园-首页原创精华区
  当你需要在短时间内设计出一个网站的时候,网站模板就非常有用了. 这也就是为什么这些设计模板已成为设计领域的最新趋势的原因. 在这篇文章中,收集了各式各样的网站模板,您可以免费下载使用,希望这些设计模板不仅带给您灵感,也让您回到创作轨迹. Coffee Maker ( 演示 | 下载 ). BusinessTemplate ( 演示 | 下载 ).

2010年最新的100個免費HTML模板

- 幻幽 or A書 - wowbox blog (網頁設計知識庫)
其他有需要請到這裡下載:CSS Templates.

12款精美的免费 HTML 网站模板下载

- xcv58 - 博客园-梦想天空
  这个系列文章收集了60款精美的免费HTML网站模板分享给大家,您可以免费下载使用. 相信这些漂亮的HTML网站模板既能够帮助您节省大量的时间和精力,又能有很满意的效果. 感谢那些优秀的设计师分享他们的劳动成果,让更多的人可以使用他们的创意设计,希望这些免费的HTML网站模板能帮助到您. 分享45款高质量的免费(X)HTML/CSS模板.

20免费的响应网页 HTML & CSS 模板

- - 苏打苏塔
响应设计(Responsive design)是今年流行的一种设计趋势,随着移动设备越来越多的被人们接受与应用,网页的设计也要注意在小屏幕下的展现方式与用户体验,于此而生的就是响应网页设计. 在这一次的分享中,和大家分享一些免费的响应 网页设计模板,你可以从这些免费的资源中,学习到如何制作响应屏幕大小(或者是说浏览器大小)的WEB设计.

基于HTML模板和JSON数据的JavaScript交互

- - 张鑫旭-鑫空间-鑫生活
本文地址: http://www.zhangxinxu.com/wordpress/?p=2649. 一、小妹妹不要怕,哥哥很温柔的. 写文章之前,我总要去网上搜索相关资料,避免内容重复,顺便学习. 同样的,在这个风和日丽,阳光明媚的周三上午,我兴致勃勃地打开百度,搜索:“JS 模板 数据”,然后…….

SeaJS 里版本号和时间戳管理的最佳实践

- 别致 - 岁月如歌
用 seajs 组织项目,上线后,经常需要更新特定文件或所有文件的时间戳,以清空浏览器缓存. 这种方式很简单直观,弊端也很明显:文件一多,时间戳会分散在各个文件,维护起来不方便. 第二种方式是利用 alias:. 这种方式用来维护 jquery 等类库模块的版本号是非常方便的. 但用来加时间戳,文件一多时,依旧不方便.

使用SeaJS实现模块化JavaScript开发

- jk - CNode社区
SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制. 与jQuery等JavaScript框架不同,SeaJS不会扩展封装语言特性,而只是实现JavaScript的模块化及按模块加载. SeaJS的主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载,将前端工程师从繁重的JavaScript文件及对象依赖处理中解放出来,可以专注于代码本身的逻辑.

【转载】使用SeaJS实现模块化JavaScript开发

- - HTML5研究小组
SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制. 与jQuery等JavaScript框架不同,SeaJS不会扩展封装语言特性,而只是实现JavaScript的模块化及按…. SeaJS是一个遵循 CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.