Skip to content
achun edited this page May 11, 2013 · 1 revision

简介

jCT 是 javaScript Common Templates 的缩写。是一种 javaScript 实现的模板引擎。可以工作于浏览器客户端或者 Node.js 环境。 作为模板引擎,jCT 主要负责把模板源文转换为 javaScript 对象,通过数据组装生成视图 View。 从文法形式上看 jCT 的文法极其类似 php,aps,jsp 的文法,也就是嵌入 html 模板文法。 这种文法,事实上是嵌入了 javaScript 脚本。jCT 采用与javaScript 完全一致的语法来书写模板,达到了与 javaScript 完全兼容。 jCT 本身的功能并不直接参与获取后台数据以及如何实施表现。 这些由应用考虑和实施。

功能

  • 模版一致性设计:通过良好的标记符号定义,模版源文件未经 jCT 解析就能表现出极其接近渲染后的效果
  • 自定义模板标记符号
  • 取值表达式:默认标记符号,开始 +-,结束标记 -+
  • 代码块:默认标记符号,开始 <!---,结束标记 -->
  • 子模版:开始 <!---///name arg1,arg2--> ,结束 <!---///name-->。事实上子模板的标记其实是位于 代码块标记 内的。arg1,arg2是参数定义的写法。
  • 成员对象: <!---//.objname {}-->
  • 成员函数: <!---//.funName function(){}-->
  • View参数: <!---// arg1,arg2-->
  • BRun:在Build后自动执行,这其实是一个成员函数 <!---//.BRUN function(){}-->
  • ERun:在Extend/ExtendTo后自动执行,这其实是一个成员函数 <!---//.ERUN function(){}-->
  • 自动Build:GetView/GetViewContinue执行时,当执行时jCT发现并没有Build时,会自动执行Build过程

创建jCT实例

格式: var jctInstance = new jCT(txt,path); 参数: txt 可以为空 模板源代码,就是一个string,不是url地址 , path 可以为空 模板源代码文件所在路径,这个是个实用便捷的参数,在笔者的应用里他被子模板使用,在你的应用里用不到的话,就忽视他就行了 返回:jCT的实例,但是这个实例没有进行构建

//构建jCT对象,仅仅准备基础数据,txt就是模板字符串,不是指模板的url地址,是内容
var instance=new jCT(txt);
//手工代码进行构建,这才是真正的javacript对象构建过程,当然您也可以省略不写,因为
instance.Build();
//如果没有进行Build,这里内部会自动进行Build过程
var htmlsrc=instance.GetView();

Tip:因为jCT支持自定义标记,如果你要自定义标记的话,你可以先生成一个jCT实例,然后进行自定义标记,再绑定源模板字符串。增加 Build 后为这个功能提供了定义的时机。样例如下

var instance=new jCT();//构建 jCT 空对象
instance.Tags={....};  //定义标记,这里省略了具体操作
instance.Init(txt);    //txt就是模板字符串
var htmlsrc=instance.GetView();

Demo

托管于 googlecode 时写的一些演示 http://jsct.googlecode.com/svn/trunk/jCT/example/index.html

jCT是如何构建实例的

事实上,jCT并不直接构建 出完整的jCT实例 ,jCT仅仅是生成 一个可以自构建的对象 .这个对象什么时候需要构建,什么时候需要执行(装配数据得到表现代码),由使用者的代码决定。 使用者写的模板源码最终会转换成为GetViewContinue方法的主体,GetView又调用了GetViewContinue.也就是说GetViewContinue的主体结构和模板是一致的。 在 GetViewContinue 的内部实现中,jCT采用了一个输出缓存区数组,把所有的输出数据push进去,最后再把数组值连接(join)成字符串输出,这样保持了较高的代码执行效率。

jCT实例保留成员函数说明

因实例是自构建的,在实现上要保留一些成员函数和成员对象来满足自构建的需求。保留成员有:

  • Fn 保留对象,供jCT实例内部使用,不能对Fn已有的属性修改.
  • Build 保留方法,模板构建 方法.
  • GetView 保留方法,获取装配数据后的表现代码.
  • GetViewContinue 保留方法, 用于递归的调用情况, 写入 输出 缓存,不输出 事实上GetView是先清空输出缓存, 然后调用GetViewContinue 最后输出缓存
  • Extend 保留方法,以参数对象 扩展jCT 实例 和子jCT对象.
  • ExtendTo 保留方法,扩展jCT实例到参数对象.
  • BRun/ERun 特例方法 ,需要用户自己实现 方法分别在Build,Extend/ ExtendTo 中自动运行. 称做RunNow支持
  • ExecChilds 保留方法,执行子jCT对象的某个方法,默认是Exec方法
  • Buildchilds 保留方法,执行 子 jCT 对象的Build方法,默认所有 的 子jCT 对象