- 浏览: 313805 次
- 性别:
- 来自: 河南郑州
文章分类
最新评论
-
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 学习笔记----默认行为
重新进行了设计,抛弃了所有重新定义javascript固有语法的方法,这样也就是无招胜有招 了,
而且可方便自定义标记 ,没有精力写注解和用法了.直接贴源代码(初稿)吧:(请在FF下测试,还没有调整IE的兼容性)
细心的朋友应该可以看出来,不同标记之间是可以转换的.
/** * javascript Common Templates(jCT) 3(第3版) * http://code.google.com/p/jsct/ * * licensed under the MIT license. * http://www.opensource.org/licenses/mit-license.php * * Author achun (achun.shx at gmail.com) * Create Date: 2008-6-23 * Last Date: 2008-6-26 * Revision:3.8.6.26 * 预定义变量: D............用于生成函数的输入参数,表示提供给模板的数据.可以通过设置Main改变此名称 * 保留属性:有些属性的保留纯粹是为了方便调试 CTA..........SRC的模板数组形式表示 CTD..........用于保留执行(Exec)模板时候传入的参数 CTV..........在执行(Exec)模板过程当中生成结果的数组形式 Fn...........继承自jCT的几个属性和方法 MAIN.........Build模板的时候生成的主体过程数组形式 PATH.........保留模板的URL路径,由调用模板的函数提供,保留这个的目的是考虑到这个参数可能会有很多的用途。 SRC..........模板原文本,由调用模板的函数提供 TAG..........模板标签风格,来自Fn的引用 ERROR........Build异常时的错误信息. * 保留方法: Build........构建模板的Exec方法,参数对应属性的TAG Clean........清理模板,参数对应属性的TAG Exec.........执行模板 * 保留字串: ... 再使用Main时用于替换主体过程的占位符 * 调用: var jct = jCT(txt,path,tag); txt..........对应属性SRC path.........对应属性PATH tag..........对应属性TAG */ function jCT3(txt,path,by){ var self=function(){ return arguments.callee.Exec.apply(arguments.callee,arguments); }; by=by||'comment';//默认的标记风格,到底是用script还是comment呢? self.Fn={}; for (var prop in jCT3.Fn) self.Fn[prop] = jCT3.Fn[prop]; self.SRC=txt; self.PATH=path; self.TAG=self.Fn[by]; self.CTA=[]; self.CTV=[]; self.CTD={}; self.Clean=function(){ this.Fn.src=this.SRC; this.Fn.path=this.PATH; this.Fn.clean(this.TAG.clean); return this.Fn.src; }; self.Build=function(){ this.Clean(); var fn=this.Fn; this.MAIN=[]; fn.path=this.PATH; var ext=fn.parse(this,this.MAIN); var jctbody=this.MAIN.join('\n'); if (ext.run) window.eval(ext.run); if (ext.main) { var func=ext.main.replace('{...}','\n{this.CTV=[];'+jctbody+'\n}\n'); }else{ var func='function(D){if(!D) D={};this.CTD=D;with(D){this.CTV=[];'+jctbody+'}\nreturn this.CTV.join("");}'; } try{ this.Exec = eval('false||'+func); }catch (ex){ this.Exec = function(){return 'jCT Parse Error';}; this.ERROR={message:ex.message + '\n'+ (ex.lineNumber || ex.number),src:func}; } return this; }; self.Build(); return self; } jCT3.Fn={ clean:function(tn){ var a=[]; var p=[0,0,0,0,0]; var e=this.src.length; while (this.slice(tn,p[4],p,e)) a.push(this.src.slice(p[0],p[1])); a.push(this.src.slice(p[4])); this.src = a.join(''); }, parse:function(self,jctbody){ var tag = self.TAG; var cta = self.CTA; var p=[0,0,0,0,0]; var e=this.src.length; var main=''; var run=''; while (this.slice(tag.tag,p[4],p,e)){//语法分2段 var p1=[0,0,0,0,p[0]]; while (this.slice(tag.exp,p1[4],p1,p[1])){//第1段取值表达式 jctbody.push('this.CTV.push(this.CTA['+cta.length+']);'); cta.push(this.src.slice(p1[0],p1[1])); jctbody.push('this.CTV.push('+this.src.slice(p1[2],p1[3])+');'); } jctbody.push('this.CTV.push(this.CTA['+cta.length+']);'); cta.push(this.src.slice(p1[4],p[1])); //处理第2段 if (this.slice(tag.ext,p[2],p1,p[3])){///*+*/处理 jctbody.push('this.CTV.push('+this.src.slice(p1[0],p1[1])+');'); var str=this.src.slice(p1[2],p1[3]); var tmp=str.indexOf(' '); var par='',sta=''; if (tmp>0){ par=str.slice(tmp+1); sta=sta.slice(0,tmp); }else sta=str; var foo=this.src.slice(p1[4],p[3]); switch(sta){ case 'Main':main=foo;break; case 'Run':run+=foo+"\n";break; case 'Child': var p2=[]; var child=tag.tag.begin+'/*-'+str+'*/'+tag.tag.end; tmp = this.src.indexOf(child,p[4]); if (tmp>0){ self[par]=jCT3(txt.slice(p[4],tmp),this.path); p[4] = tmp + child.length; } break; } }else{ jctbody.push(this.src.slice(p[2],p[3])); } } var p1=[0,0,0,0,p[4]]; while (this.slice(tag.exp,p[4],p1,e)){//第1段取值表达式 jctbody.push('this.CTV.push(this.CTA['+cta.length+']);'); cta.push(this.src.slice(p1[0],p1[1])); jctbody.push('this.CTV.push('+this.src.slice(p1[2],p1[3])+');'); } jctbody.push('this.CTV.push(this.CTA['+cta.length+']);'); cta.push(this.src.slice(p1[4])); return {main:main,run:run}; }, slice:function(tn,b1,p,max){//把string第2段分成2段 var begin=tn.begin; var end=tn.end; var e1,b2,e2; e1=this.src.indexOf(begin,b1); if (e1<0 || e1>=max) return false; b2=e1+begin.length; if (b2<0 || b2>=max) return false; e2=this.src.indexOf(end,b2); if (e2<0 || e2>=max) return false; p[0]=b1;p[1]=e1; p[2]=b2;p[3]=e2; p[4]=e2+end.length; return true; }, //下面就是几个自定义标记的配置了 comment:{//注释标记风格 tag:{begin:'<!---',end:'-->'}, exp:{begin:'+-',end:'-+'}, ext:{begin:'/*+',end:'*/'}, clean:{begin:'<!--clean-->',end:'<!--clean -->'} }, script:{//脚本标记风格 tag:{begin:'<script type="jct">',end:'</script>'}, exp:{begin:'+-',end:'-+'}, ext:{begin:'/*+',end:'*/'}, clean:{begin:'<script type="jct" />',end:'<script type="jct" />'} }, code:{//code标记风格 tag:{begin:'<code lang="jct">',end:'</code>'}, exp:{begin:'+-',end:'-+'}, ext:{begin:'/*+',end:'*/'}, clean:{begin:'<code lang="jct" />',end:'<code lang="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 第三版简要文档
2008-09-07 14:26 5891SVN已经更新.最新下载:jCT最新版本 更多信息请看 ... -
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 2557-2020 规范
JCT 2558-2020 规范
标准 JCT174-2005无碱玻璃纤维带
JCT 2177-2021 硅藻泥装饰壁材
JCT 621-2021 硅酸盐建筑制品用生石灰
JCT 1017-2020 建筑防水材料用聚合物乳液
JCT 2560-2020 结构密封胶
这个名为"JCT"的工具包提供了丰富的功能,使得开发者在Java应用中集成加密和解密操作变得更加简单。下面我们将详细探讨Java加密的相关知识点以及可能在JCT中涉及的技术。 1. **对称加密**:这是最常见的加密方式,...
JCT 60006-2020 瓷砖薄贴法施工技术规程
JCT 620-2021 石灰取样方法
JCT 618-2019化学解析方法
JCT 2041-2020 聚氨酯灌浆材料
JCT 2561-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)所应用的测试序列
JCT 1057-2021 玻璃纤维增强水泥(GRC)外墙板
JCT 为java开发者提供实用、方便、简洁的加密和解密相关的工具代码。1.0版提供Blowfish,SHA与MD5数字摘要,PBE基于口令的加密,RSA算法工具类,使这些算法更容易在编成中使用.文件包中含源码、文档、class包WDSsoft:...
JCT 949-2021 混凝土制品用脱模剂
JCT 2604-2021 仿石型混凝土面板和面砖
JCT 60003-2019
JCT 2567-2020