日期:2014-05-16 浏览次数:20379 次
示例: 字符串 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(""); };