jCT 3.9.12.10 放出,大改变,文档重新发布
SVN已经更新.最新下载:jCT最新版本
更多信息请看我博客里的jCT专题,或者jCT开源主页示例里面有最简单的例子,另外我更希望感兴趣的你能直接提出html代码和需求,我们讨论如何用jCT的方法写出.
??
对于上一篇文章 jCT如何改造边想边发 ,jCT今天有所更新,涉及以下方面
1.模板语法
2.废除RunNow,增改为BRun,ERun
3.增加自动Build功能
这将造成与以前的版本不兼容
模板语法
?
针对于jCT如何改造边想边发文内提出的原 /* 的注释模板书写不方便(需要shift键,两只手都要敲击键盘),改为 // 开头
功能名称 jCT 3.8.xxx版 jCT 3.9.xx版
==================================================
GetView 参数名 不支持 <!---// arg1,arg2-->
子模板定义开始 <!---/*+@name*/--> <!---///name-->
子模板定义结束 <!---/*-@name*/--> <!---///name-->
子模板参数 不支持 <!---///name arg1,arg2-->
成员对象 <!---/*+$objname*/ <!---//.objname
成员函数 <!---/*+ funName*/ <!---//.funName function(){}
成员结束 --> -->
==================================================
新版优点:方便录入,更易于记忆,形式更符合javascript语法习惯,参数的传递更方便
其实有了扩展语法根本就不需要成员定义了,仅仅是继承下来了
说明:由于模板语法的变迁,自定义语法中的member,memberend对应也无效了
废除RunNow,增改为BRun,ERun
因为原来的RunNow方法不能区别Build和Extend,ExtendTo的不同时期的差别,所以废除RunNow,改为
BRun:在Build后自动执行
ERun:在Extend/ExtendTo后自动执行
增加自动Build功能
笔者自己也发现总是显示的使用Build很不方便,就增加了自动Build功能,自动Build发生在GetView/GetViewContinue执行时,当执行时jCT发现并没有Build时,会自动执行Build过程
看看 Example Online 是最快的了解方法
jCT 3.9.xxx 版文档(不兼容3.8.xxx版本)
jCT全称:
javaScript Common Templates? 就是 javaScript 共用模板
属于WEB开发模板技术的一种.jCT用javaScript写成,通常工作于浏览器客户端.
基本功能:
作为模板技术,完成后台数据与htm模板(jCT模板)的组装,得到最终表现代码是jCT的基本功能.
设计理念:
作为模板技术,jCT仅仅负责把模板javaScript对象化.并提供数据组装文法.
从文法形式上看jCT的文法极其类似php,aps,jsp的文法,也就是嵌入html模板文法
这种文法,事实上是嵌入了javaScript脚本,采用完全与javaScript脚本一致的语法来书写模板,达到了与javaScript完全兼容.
因此jCT本身的功能并不直接参与获取后台数据.与如何实施表现.这些功能可以通过书写模板的时候直接写入进去,反正都是javaScript脚本.或者采取其他的手段从外部控制.
由于在实际的应用中业务行为可能很复杂,jCT提供了子模板对象的支持.从jCT对象的最终形式 javaScript 对象来说,这就形成了一棵对象树,而且这个对象树的组织完全是由模板代码决定.
?
调用:
jCT就是一个根据提供的文本模板来生成jCT实例对象的模板编译器
而这个可以组织数据得到表现代码的实例对象具体都做了哪些和应用有关的动作,完全由模板的内容决定.毕竟所有的执行代码都在模板里,都是使用者自己写的.
var instance=new jCT(txt);//构建jCT对象,仅仅准备基础数据,txt就是模板字符串,不是指模板的url地址,是内容instance.Build();//手工代码进行构建,这才是真正的自构建,当然您也可以省略不写,因为var htmlsrc=instance.GetView();//如果没有进行Build,这里内部会自动进行Build过程
视图 :
构建完成了,如何执行获取模板视图呢?
就是GetView了,这个是用来的到模板执行后的html代码--也就是视图.
就像上面的代码,htmlsrc 就是文本形式的视图,把这个htmlsrc加载到页面的什么地方由你根据应用需要决定,比如
document.body.innerHTML=htmlsrc;//整个页面就都刷新了
jCT是如何构建实例的:
jCT实例如何运行:
var obj={ RNow:function(){alert('hello jCT');}, Exec:function(D){document.body.innerHTML=this.GetView(D);}}通过1里面的模板得到jCT实例对象后,通过Extend/ExtendTo与上面的obj对象融合到一起:比如jCT实例对象是Ins
<!---//.hello function(who){alert('hello! '+who||'');}-->下面是个普通成员对象定义:
<!---//.name'xiao qiang'-->下面是个子jCT实例定义:要注意子实例定义要有开始,有结束,还可以有参数
<!---///hello who--><h1>hello:+-who-+</h1><!---///hello-->事实上有了Extend,ExtendTo后成员函数和成员对象的定义基本就用不到了
<!---// who--><h1>hello:+-who-+</h1>jCT编译模板阶段会自动根据第一个出现的block去自动判断采用那个文法风格
Tags:{//几种不同的模板定义风格comment:{//注释标签风格block:{begin:'<!---',end:'-->'},//语法块标记exp:{begin:'+-',end:'-+'},//取值表达式clean:{begin:'<!--clean',end:'/clean-->'}//清理标记},script:{//脚本标签风格block:{begin:'<script type="text/jct">',end:'</script>'},exp:{begin:'+-',end:'-+'},clean:{begin:'<!--clean',end:'/clean-->'}},code:{//code标签风格block:{begin:'<code class="jct">',end:'</code>'},exp:{begin:'+-',end:'-+'},clean:{begin:'<!--clean',end:'/clean-->'}}}
jCT API:
?
?