Lite2 体验程序发布,模板系统中的小无相功?
程序员文章站
2022-03-19 14:53:45
...
一个Lite最新版本的测试环境。
最大的特点是提供了一种非常*方便的跨平台扩展机制。
您可以在这个平台的基础上轻松实现各种完全不同的模板语法。就像逍遥派的小无相功^_^。
Google Closure Template 语法运用实例
为了测试方便,用法稍有改变,前后端模板集成,不再要求手动编译。
closure.soy
closure.s.js
感觉如何?“小无相功精微渊深,以此为根基,本寺的七十二绝技,倒也皆可运使,只不过细微曲折之处,不免有点似是而非罢了。”
语法模拟
Google Closure哪洋洋洒洒3兆多的源代码,实在是写的太冤了,这不就是120行代码的事情嘛^_^
/WEB-INF/closure.js
实例中还有一个基于文本语法的模板实现。命名为LiVI,适合在VI上编辑的Lite 模板语言。
也有几个常用的语法扩展,比如百科词条扩展,语法高亮扩展。
如何测试:
1. 双击如下webstart地址启动测试服务器。
http://www.xidea.org/webstart/JSide.jnlp
测试服务器启动之后,您的桌面右侧将出现一个彩筐。这是一个操作终端。
2. 下载测试代码并解压,设置为测试服务器的网站目录。
http://lite.googlecode.com/files/Example-20091213.zip
将解压的目录拖放到测试服务器上(彩筐)即可。
3. 打开首页
看那里顺眼点那里吧:)
最大的特点是提供了一种非常*方便的跨平台扩展机制。
您可以在这个平台的基础上轻松实现各种完全不同的模板语法。就像逍遥派的小无相功^_^。
Google Closure Template 语法运用实例
为了测试方便,用法稍有改变,前后端模板集成,不再要求手动编译。
closure.soy
#!encoding=utf-8;extension=/WEB-INF/closure.js <pre> {foreach $name in $names} {if not $greetingWord} Hello {$name}! {else} {$greetingWord} {$name}! {/if} {ifempty} ..... {/foreach} </pre> <!-- 前端模板(不同GCT,GCT需要编译,也不能直接插入) --> {template testSoy} {foreach $name in $names} {if not $greetingWord} Hello {$name}! {else} {$greetingWord} {$name}! {/if} {ifempty} ..... {/foreach} {/template} <script> var data = new Object(); data.$greetingWord='hehe'; data.$names=['kexin','dawei','niuyao']; alert(testSoy(data)); </script>
closure.s.js
var $greetingWord = "haha" var $names = ["kexin",'dawei','quguangyu','niuyao'] lite.render("closure.soy");
感觉如何?“小无相功精微渊深,以此为根基,本寺的七十二绝技,倒也皆可运使,只不过细微曲折之处,不免有点似是而非罢了。”
语法模拟
Google Closure哪洋洋洒洒3兆多的源代码,实在是写的太冤了,这不就是120行代码的事情嘛^_^
/WEB-INF/closure.js
$if = { parse : function(text,start,context){ var end = text.indexOf("}",start); var el = text.substring(start+4,end); el = el.replace(/^\s*not\b/,'!'); context.appendIf(el); return end+2; }, findStart : function(text,start,otherStart){ return text.indexOf("{if",start); } } $else = { parse : function(text,start,context){ context.appendEnd(); context.appendElse(null); return start+7; }, findStart : function(text,start,otherStart){ return text.indexOf("{else}",start); } } $elseif = { parse : function(text,start,context){ context.appendEnd(); var end = text.indexOf("}",start); var el = text.substring(start+8,end); el = el.replace(/^\s*not\b/,'!'); context.appendElse(el); return end+2; }, findStart : function(text,start,otherStart){ return text.indexOf("{elseif",start); } } $end = { parse : function(text,start,context){ var end = text.indexOf("}",start); var word = text.substring(start+2,end); switch(word){ case 'if': case 'foreach': context.appendEnd(); //java.lang.System.out.println([context.toCode()].join('\n====\n')) break; default: return start; } return end+1; }, findStart : function(text,start,otherStart){ return text.indexOf("{/",start); } } // {foreach $additionalName in $additionalNames} var $for = { parse : function(text,start,context){ var end = text.indexOf("}",start); var el = text.substring(start+9,end); el = el.replace(/^\s+/,''); var split = el.indexOf('in') var varName = el.substring(0,split).replace(/\s+$/,''); var items = el.substring(split+3); context.appendFor(varName,items,null); //java.lang.System.out.println([varName,items].join('\n====\n')) return end+2; }, findStart : function(text,start,otherStart){ return text.indexOf("{foreach",start); } }; //{ifempty} var $ifempty = { priority:100,//默认优先级是1,这个最低,所以设置为0 parse : function(text,start,context){ context.appendEnd(); context.appendElse(null); return start+10; }, findStart : function(text,start,otherStart){ return text.indexOf("{ifempty}",start); } }; $el = { priority:-1,//默认优先级是1,这个最低,所以设置为0 parse : function(text,start,context){ var end = text.indexOf("}",start); var el = text.substring(start+1,end); context.appendEL(el); return end+1; }, findStart : function(text,start,otherStart){ return text.indexOf("{",start); } } //{template fn}{/template} var clientParser = new Packages.org.xidea.lite.parser.impl.ClientParser(); var $template = { parse : function(text,start,context){ var text2 = text.substring(start); var match = text.match(/{template\s*([^\s}]+)}([\s\S]+){\/template}/); var id = match[1]; var client = match[2]; clientParser.parse(id,client,context); return start +match[0].length; }, findStart : function(text,start,otherStart){ return text.indexOf("{template",start); } } context.addTextParser($el); context.addTextParser($if); context.addTextParser($else); context.addTextParser($elseif); context.addTextParser($end); context.addTextParser($for); context.addTextParser($ifempty); context.addTextParser($template);
实例中还有一个基于文本语法的模板实现。命名为LiVI,适合在VI上编辑的Lite 模板语言。
也有几个常用的语法扩展,比如百科词条扩展,语法高亮扩展。
如何测试:
1. 双击如下webstart地址启动测试服务器。
http://www.xidea.org/webstart/JSide.jnlp
测试服务器启动之后,您的桌面右侧将出现一个彩筐。这是一个操作终端。
2. 下载测试代码并解压,设置为测试服务器的网站目录。
http://lite.googlecode.com/files/Example-20091213.zip
将解压的目录拖放到测试服务器上(彩筐)即可。
3. 打开首页
看那里顺眼点那里吧:)