日期:2014-05-16 浏览次数:20477 次
示例:
字符串 inTmp :   Hello,#{ VAR.custName /},My name is #{ VAR.myName /}.
var templateC= GT.compileTemplate(inTmp);
var inArg= {
	custName 'Tom',
	myName: 'fins'
}
var outResult = GT.runTemplate(templateC,inArg);
字符串 outResult :  Hello,Tom,My name is fins.
在#{ .../} 也可以写如相对 复杂的 js脚本, 例如  #{ VAR.gender==1?'男':'女'  /}
如果再复杂些建议写成 function,然后在 #{ /}内部调用 (可以写成内联的function 也可以用调用时传参的).
真的是超轻量级, 所以就不发附件了 直接贴上来
if (!GT){
	GT={};
}
// template为 一个字符串, 返回的是编译好的一个字符串数组,该数组为 runTemplate:方法的输入参数之一.
GT.compileTemplate= function(template){
			var TEMPLATE_START="#{";
			var TEMPLATE_END="/}";
			var templateC=[];
			var snippets=[];
			var current=0;
			while(true){
				var start= template.indexOf( TEMPLATE_START ,current);
				var sBegin=start+2;
				var sEnd=template.indexOf( TEMPLATE_END ,sBegin);
				if (sBegin>=2 && sEnd>sBegin){
					templateC.push(template.substring(current,start) );
					var sn=template.substring(sBegin,sEnd);
					if (sn.indexOf("#")==0){
						sn=eval( sn.substring(1) );
					}else{
						snippets.push(templateC.length);
					}
					templateC.push( sn );
				}else{
					templateC.push( template.substring(current) );
					break;
				}
				current=sEnd+2;
			}
			templateC.push(snippets);
			return templateC;
	};
// templateC为编译好的字符串数组, invar为模板中要传入的变量.
// 如果要传入多个变量, 请使用 {},或[] .
GT.runTemplate= function(templateC,invar){
		var VAR=invar;
		var snippets=templateC[templateC.length-1];
		var rs=[];
		var sIdx=0;
		for (var i=0;i<templateC.length-1;i++ ){
			if (snippets[sIdx]==i){
				rs.push(  eval(templateC[i]) );
				sIdx++;
			}else {
				rs.push( templateC[i] )
			}
		}
		return rs.join("");
	};