- 浏览: 313803 次
- 性别:
- 来自: 河南郑州
文章分类
最新评论
-
sillydong:
https://github.com/sillydong/CZ ...
PHP 框架 Yaf 学习笔记----默认行为 -
achun:
jocce 写道var data1={};里面放的是json数 ...
jCT 嵌入模板简化方案 -
jocce:
var data1={};里面放的是json数据吗?为什么我用 ...
jCT 嵌入模板简化方案 -
achun:
randomnany 写道hi:你说的那个所谓的bug不是bu ...
PHP 框架 Yaf 学习笔记----默认行为 -
randomnany:
hi:你说的那个所谓的bug不是bug~yaf默认的就是读取 ...
PHP 框架 Yaf 学习笔记----默认行为
SVN已经更新.最新下载:jCT最新版本
更多信息请看我博客里的jCT专题 ,或者jCT开源主页示例 里面有最简单的例子,另外我更希望感兴趣的你能直接提出html代码和需求,我们讨论如何用jCT的方法写出.
========此版本已经废弃,新版文档======
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,对应用来说,jCT就是一个根据提供的文本模板来生成jCT实例对象的模板编译器
而这个可以组织数据得到表现代码的实例对象具体都做了哪些和应用有关的动作 ,完全有模板的内容决定.毕竟所有的执行代码都在模板里,都是使用者自己写 的.
var instance=new jCT(txt);//构建jCT对象,仅仅准备基础数据,txt就是模板字符串,不是指模板的url地址,是内容 instance.Build();//这才是真正的自构建
执行 :
构建完成了,如何执行呢?事实上根本就不存在执行这个说法,因为所谓的执行就是去运行txt模板源代码里定义的方法,由于代码是使用者自己写的,都定义了什么方法,书写者是知道的,比如说 模板源代码里定义了方法hello,要执行hello的话就
instance.hello();就行了。jCT是如何做到这样的,请继续看。
jCT是如何构建实例的 :
jCT这样做的原因是考虑到实例有可能重新构建 ,所以干脆把这个构建的任务交由实例对象自己完成.
jCT实例如何运行 :
- Fn 保留对象,供jCT实例内部使用,不能对Fn已有的属性修改.
- Build 保留方法,模板构建 方法.
- GetView 保留方法,获取装配数据后的表现代码.
-
GetViewContinue 保留方法, 用于递归的调用情况, 写入 输出 缓存,不输出
事实上GetView是先清空输出缓存,
然后调用GetViewContinue
最后输出缓存
- Extend 保留方法,以参数对象 扩展jCT 实例 和子jCT对象.
- ExtendTo 保留方法,扩展jCT实例到参数对象.
-
RunNow 特例方法 ,用户可以自实现这个方法,
此方法在Build,Extend, ExtendTo 中自动运行 - ExecChilds 保留方法,执行子jCT对象的某个方法,默认是Exec方法
-
Buildchilds 保留方法,执行 子 jCT对象的Build方法,默认所有的 子 jCT对象
GetView 方法内部的代码就是经过jCT编译转化过来的使用者自己写的模板代码。当你实作一个jCT实例并Build() 后,你可以通过GetView.toString(),查看jCT到底把模板编译成了什么,同时也就明白了jCT的原理,明白jCT的方法具有很高的效率.
-
嵌入 javasctipy代码的 jCT 模板 文件,通常就是html文件啦
依照jCT的文法形式书写嵌入式 javasctipt 代码,
这些代码经过jCT编译后会得到jCT实例对象
重要的是里面含有 RunNow的定义,RunNow里有
this.Extend(obj);
-
用来扩展jCT实例对象的javascript文件
因为jCT实例对象有自扩展 方法 Extend ,所以这种文件里面直接写下一个期望得到jCT实例对象就行了,这个对象就是上面 this.Extend(obj); 里的obj,例如:
var obj={ RunNow:function(){alert('hello jCT');}, Exec:function(D){document.body.innerHTML=this.GetView(D);} }
Tags:{//几种不同的模板定义风格 comment:{//注释标签风格 block:{begin:'<!---',end:'-->'},//语法块标记 exp:{begin:'+-',end:'-+'},//取值表达式 member:{begin:'/*+',end:'*/'},//定义成员语法标记 memberend:{begin:'/*-',end:'*/'},//定义成员结束语法标记 clean:{begin:'<!--clean',end:'/clean-->'}//清理标记 }, script:{//脚本标签风格 block:{begin:'<script type="text/jct">',end:'</script>'}, exp:{begin:'+-',end:'-+'}, member:{begin:'/*+',end:'*/'}, memberend:{begin:'/*-',end:'*/'}, clean:{begin:'<!--clean',end:'/clean-->'} }, code:{//code标签风格 block:{begin:'<code class="jct">',end:'</code>'}, exp:{begin:'+-',end:'-+'}, member:{begin:'/*+',end:'*/'}, memberend:{begin:'/*-',end:'*/'}, clean:{begin:'<!--clean',end:'/clean-->'} } }
- block : 语句块,用来书写javascript语句,或者标示一个成员的界限
-
member: 成员定义,用来定义子jCT模板源码段或定义成员函数或普通的成员对象
-
exp : 取值表达式,用来书写javascript值表达式
-
clear : 清理标记,用来完成一致性设计 ,
一致性设计指的是在模板没有被解析并执行前,仅仅在浏览器上打开模板源文件,就可以看到和解析并执行后一致的样式效果
由于成员函数和子jCT实例对象都是采用的同一个标记,为了区分他们的不同,简单的在实例名称的前面加一个符号@以示区分,下面是个成员函数定义 :
<!---/*+hello*/ alert('hello'); -->
<!---/*+$hello*/ ['hello'] -->
<!---/*+@hello*/--> <h1>hello</h1> <!---/*-@hello*/-->
jCT编译模板阶段会自动根据第一个出现的block去自动判断采用那个文法风格
如果你有自己的想法,那就自己定义 一个风格吧。
jCT API :
-
jCT 调用
格式: var jctInstance = new jCT(txt,path);
参数:
txt 可以为空 模板源代码,就是一个string,不是url地址 ,
path 可以为空 模板源代码文件所在路径,这个是个实用便捷的参数,在笔者的应用里他被子模板使用,在你的应用里用不到的话,就忽视他就行了
返回:jCT的实例,但是这个实例没有进行构建
注 :jCT并不负责获取模板的内容,获取后台数据,装配视图到DOMTree中.
根据应用和使用的其他框架,使用者自行 获取模板的内容,获取后台数据,并通过GetView获得视图,然后自己写代码把视图装配的 DOMTree. -
构建实例, 并执行 RunNow方法,如果有的话
格式: jctInstance. Build(txt,path);
参数:
txt 可以为空 模板源代码 ,就是一个string,不是url地址
path 可以为空 模板源代码文件所在路径,这个是个实用便捷的参数
可以看到上面这两个调用有相同的参数,当然根据情况给出一次就行了
除非要改变模板,也就是具有重构建的效果
返回:jCT实例自身 -
扩展 jCT实例 自身 , 并执行 RunNow方法,如果有的话
格式: jctInstance. Extend(object)
参数:
object 要扩展的来源对象
返回:jCT实例自身
-
扩展 附加到其他对象上, 并执行 RunNow方法,如果有的话
格式: jctInstance. ExtendTo(object)
参数:
object 要扩展的目标对象
返回:jCT实例自身 -
执行childs对象所列成员里的某个方法
格式: jctInstance. ExecChilds(childsObjOrmethodName,methodName)
参数:
childsObjOrmethodName
以{childName:argument}形式定义的
{子jCT实例名:传入调用方法的参数}的对象
如果是字符串的话,表示要执行的方法名
并执行所有子jCT实例的次方法
methodName
要调用的方法名,如果为空调用 方法名为Exec
返回:jCT实例自身
-
构建子jCT对象,并执行 子jCT对象的 RunNow方法,如果有的话
格式: jctInstance. BuildChilds(childs)
参数:
childs 要 构建 的子jCT对象,可以是数组或者以","分割的字符串
默认是所有的子jCT对象
返回:jCT实例自身
-
得到装配数据后的html视图代码
格式: jctInstance. GetView()或者jctInstance.GetViewContinue()
参数:
GetViewContinue 这个函数其实就是从使用者写的模板源代码里得到的,
GetViewContinue 和 GetView的区别见前面的文档
所以如果要传入参数的话, 模板源代码里可以通过类似这样定义
var varName=arguments[n];
来交换变量,通常传入的变量就是要带入的数据,当然也有其他方法来实现
返回: 装配数据后的html视图代码
评论
不知道有没有手工清理缓存的方法?使用中在IE6下出现奇怪的问题,怀疑是jct的原因方不方便加我联系方式:gtalk:sunshow@gmail.commsn:sunshow@live.comqq:1869265
jCT的缓存就是一个javascript的数组,也就是说一般的模板用的是字符串变量+=的形式,
jCT用的是:
this.Fn.V=[];
this.Fn.V.push(str);
最后才
return this.Fn.V.join('')进行输出的
因此这个缓存是无副作用的.
使用中在IE6下出现奇怪的问题,怀疑是jct的原因
方不方便加我联系方式:
gtalk:sunshow@gmail.com
msn:sunshow@live.com
qq:1869265
学习jquery的过程中尝试去使用
jCT本身的功能并不直接参与获取后台数据 .与如何实施表现上面这句根本不解。 不参数获取后台数据,怎样得到数据库数据?很希望能看到跟java结合的例子
因为获取后台数据的方法太多了,而且大家往往在用一些框架,比如
jquery,mootools,extjs等.
这些都有自己获取后台数据的方法,因此jCT不再费这个功夫了.
还有就是,这和使用jCT的应用有关,
如果是ajax获取数据,那就用那些方便的框架了,
如果是单页面,那可以直接把数据打到页面上,比如输出到javascript变量,pre的innerTEXT,textarea的value
同理,模板源代码,也可以通过ajax获取,或者在页面上设置一个DIV的id,源代码包进去,调用的时候获取innerHTML传给jCT就行了.
所以jCT的使用几乎是和后台无关的,不管你后台用的是什么语言.
上面这句根本不解。 不参数获取后台数据,怎样得到数据库数据?
很希望能看到跟java结合的例子
看到你用jquery+jct的。
最近在学习jquery
想结合你的使用,来开发一个内容管理,实现一个网站。。。
看来很多需要学习和深入使用!
应该有一些比较简单的,到复杂的demo或者教程,gt-grid就有不错,要有个渐渐的过程。新手根本就接受不了。
其实本文的最上面给出了最简单的demo链接.
那是最简单的用法了,可貌似大家
无法从这最简单的用法中看到jCT的使用价值.
无法从这些简单的demo中理解/认同jCT.
没有人呼应/交流/提出具体的需求,
我怎么会有写复杂demo的动力呢?
所谓誓为知己者死!
新手根本就接受不了。
不好意思,不小心看到了《jCT与AJAX七宗罪》一文,怎么说呢,源代码和实际看到的东西完全没有关系,这点究竟是好是坏暂且不论。只是设计的时候未免要对屏蔽js的情况单独做处理,工作量无形中翻倍了。
你的感觉和大多数人一样呀!
这就是前台模板不受欢迎的大原因!
大家都忽视了几个重点:
1.用jCT不是必须用ajax,就像我给出的例子都是嵌入式模板的。
2.模板可以解耦,而前台模板解耦度是最高的,可以做到完全解耦,而且有些像排序,数据重新整理等工作可以放到前台。
3.现代的浏览器不能运行javascript的比例能有多少呢?相比css/html代码兼容性好像更严重吧
4.如果用jCT+ajax,那搜索引擎优化是可以独立出来的,这个方法在《jCT与AJAX七宗罪》一文中,关键是大家都没有实际去实战一下,实战之后再来评判吧。
5.不能靠以往的经验来评估jCT,评估jCT必须要实际的操作一下.因为像jCT这样的东西太少了.以往大家的经验都不足以对她进行评估。
6.《jCT与AJAX七宗罪》一文正好是为了解决使用jCT+ajax这种方案中遇到的问题的,虽然原因不是有jCT本身造成的。但是不解决这些问题,我自己也不会用jCT的。就像现在我已经解决了,可是大家仍然不容易接受。
7.看看我另一篇文章
jCT 使用教程之[可视化组件]Tree
jCT做UI的方便和高度可制定吧
初学者提问,怎样跟后台结合?作到动态获取数据库数据
jCT本身是不负责获取数据的,获取数据都是使用者自己根据应用自己写.
如果是动态获取的话当然是用ajax获取JSON格式的数据最方便了.
这个实现起来方法很多,建议你使用现有的框架来做比如用jQuery
可以看看
降低前后台业务逻辑上的耦合度,前后台细粒度数据通讯的方法
这篇文章.
var instance=new jCT(txt,tblName);//构建jCT对象,仅仅准备基础数据,txt就是模板源文件
instance.Build(tblName);//这才是真正的自构建
这个Build可以重复多次,比如我的表格重新下载了,要重新根据数据展示,那应该要rebuild一下
我已经没有更多的思路了,估计长期都不会再更新了,
以后也就是做些应用,发写技巧什么的了.
jCT在设计初期就有一个一致性的目标,就是要改变
数据没有装配前无法预览到希望的结果
这个常规模板的大缺陷,
这是jCT为什么采用
<!----->
的原因。这个注释语法根本就是透明的。
也就是说浏览源模板,和浏览编译执行后的视图,都可以看到一致性的样式设计。
发表评论
-
前台模板 Element 属性渲染的思考
2010-03-27 11:03 0jCT 一直是在前台解 ... -
jCT的纠结,前台模板下Grid基础版
2009-12-20 03:04 1862SVN已经更新.最新下载:jCT最新版本 ... -
jCT的纠结,前台模板下的设计模式VS组件,通用组件已gone
2009-12-19 14:55 1868一直以来都想用jCT写 ... -
jCT 3.9.12.10 放出,大改变,文档重新发布
2009-12-10 23:35 3297SVN已经更新.最新下载:jCT最新版本 ... -
基于jCT前台模板设计要点备注
2009-04-19 16:54 0第一个通讯是获得用户角色,获取用户是否登录及相关信息,因 ... -
jCT3改如何改进,边想边发
2009-03-26 11:28 1619ps:新版已经发布,请看 新版文档 ============ ... -
2008中国开源软件竞赛揭晓jCT榜上有名
2008-12-30 21:07 1633今天查收的邮件发现的,获得了优秀技术创新奖 的最后一名--- ... -
jCT 3更新--为发展调整代码结构
2008-12-04 15:01 1637SVN已经更新.最新下载:jCT最新版本 更多信息请看 ... -
jCT 嵌入模板简化方案
2008-11-13 09:38 2760本文代码在线演示 http://jsct.googlecod ... -
无独有偶,另一个采用原生js语法的js template工具EJS
2008-11-10 10:14 4657EJS开源主页: http://code.google.c ... -
jCT 使用教程之[UI组件]Tree
2008-10-29 15:42 1784SVN已经更新.最新下载: ... -
jCT 3正则版测试,正则就是慢
2008-09-10 00:19 1712我在jCT的说明中提到,jCT为了保障速度,没有用正则。今天我 ... -
jCT与AJAX七宗罪
2008-09-08 20:33 2614jCT的更多信息请看我博 ... -
jCT 在实战中洗礼,jCT要成为终极的javascript前台模板
2008-09-06 10:44 1603说在前面 : 由于目前正在用jCT的第三版实作项目,在项目中 ... -
jCT 使用教程之[嵌入模板]
2008-09-02 11:20 2495更多信息请看我博客里的jCT专题 ,或者jCT开源主页示例 ... -
js模板编译器jCT,推荐/问题贴
2008-08-27 09:58 1821jCT的更多信息请看我博客里的jCT专题 ,或者jCT开源主 ... -
javascript 模板编译器jCT----的梦想
2008-08-23 10:31 2600模板是什么 ? 模板是把数据和表现组装到一起的工具,是WEB开 ... -
jCT 第三版简要文档,此文档已经废弃,留作历史
2008-07-11 11:47 1385JavaScript Common Templates 第 ... -
都变了样!我这样用jCT模板.
2008-07-02 14:58 1660在写这篇文章的时候我相信很多朋友都不明白我在说什么,会奇怪我这 ... -
jCT 第三版预览,已废弃,留作历史
2008-06-26 17:31 1400重新进行了设计,抛弃了所有重新定义javascript固有语法 ...
相关推荐
JCT 2557-2020 规范
8. **文档和源代码**:压缩包中的`jct_doc.zip`可能是JCT工具包的API文档,对于理解和使用JCT非常有帮助。`jct_src.zip`则可能包含JCT的源代码,供开发者学习和自定义扩展。 9. **安全标准和协议**:JCT可能遵循了...
JCT 2558-2020 规范
标准 JCT174-2005无碱玻璃纤维带
JCT 2177-2021 硅藻泥装饰壁材
JCT 621-2021 硅酸盐建筑制品用生石灰
JCT 1017-2020 建筑防水材料用聚合物乳液
JCT 618-2019化学解析方法
JCT 2560-2020 结构密封胶
JCT 60006-2020 瓷砖薄贴法施工技术规程
JCT 620-2021 石灰取样方法
JCT 为java开发者提供实用、方便、简洁的加密和解密相关的工具代码。1.0版提供Blowfish,SHA与MD5数字摘要,PBE基于口令的加密,RSA算法工具类,使这些算法更容易在编成中使用.文件包中含源码、文档、class包WDSsoft:...
JCT 2561-2020 金属复合板
JCT 2041-2020 聚氨酯灌浆材料
Report of Subjective Test Results of Responses to the Joint Call for Proposals (CfP) on Video Coding Technology for High Efficiency Video Coding (HEVC)所应用的测试序列
标题中的“PDF文档-JCT682-1997水泥胶砂试体成型振实台.zip”指的是一份关于水泥胶砂试体成型振实台技术标准的压缩文件,其中包含了一份PDF文档,详细介绍了JCT682-1997年制定的相关规范。这份标准是中国建筑材料...
JCT 1057-2021 玻璃纤维增强水泥(GRC)外墙板
JCT 2604-2021 仿石型混凝土面板和面砖
JCT 949-2021 混凝土制品用脱模剂
JCT 60003-2019