Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ǰ¶ËäÖȾÒýÇædoT.js½âÎö
 
×÷Õß: ½¨»Ô À´Ô´£ºÃÀÍŵãÆÀ¼¼ÊõÍÅ¶Ó ·¢²¼ÓÚ£º2017-4-5
  1574  次浏览      30
 

±³¾°

ǰ¶ËäÖȾÓкܶà¿ò¼Ü£¬¶øÇÒÐÎʽºÍÄÚÈÝÔÚ²»¶Ï·¢Éú±ä»¯¡£ÕâЩÑݱäµÄ±³ºóÊÇÉè¼ÆÄ£Ê½µÄ±ä»¯£¬¶ø¹é¸ùµ½µ×Êǹ¦ÄÜ»®·ÖÂß¼­µÄÑݱ䣺MVC¡ª>MVP¡ª>MVVM£¨ºöÂÔ×îÔç»ìÔÚÒ»ÆðµÄд·¨£¬ÄDz»³ÆÎªÄ£Ê½£©¡£½ü¼¸ÄêÐËÆðµÄReact¡¢Vue¡¢AngularµÈ¿ò¼Ü¶¼ÊôÓÚMVVMģʽ£¬ÄܰïÎÒÃÇʵÏÖ½çÃæäÖȾ¡¢Ê¼þ°ó¶¨¡¢Â·ÓÉ·Ö·¢µÈ¸´ÔÓ¹¦ÄÜ¡£µ«ÔÚһЩֻÐèÍê³ÉÊý¾ÝºÍÄ£°å¼òµ¥äÖȾµÄ³¡ºÏ£¬ËüÃǾÍÏԵñ¿ÖضøÇÒѧϰ³É±¾½Ï¸ßÁË¡£

ÀýÈ磬ÔÚÃÀÍÅÍâÂôµÄ¿ª·¢Êµ¼ùÖУ¬Ç°¶Ë¾­³£´Óºó¶Ë½Ó¿ÚÈ¡µÃ³¤´®µÄÊý¾Ý£¬ÕâЩÊý¾ÝÓµÓÐÏàͬµÄÑùʽģ°å£¬Ç°¶ËÐèÒª½«ÕâЩÊý¾ÝÔÚͬһ¸öÑùʽģ°åÉÏ×öÖØ¸´äÖȾ²Ù×÷¡£

½â¾öÕâ¸öÎÊÌâµÄÄ£°åÒýÇæÓкܶ࣬doT.js£¨³ö×ÔÅ®³ÌÐòÔ±Laura DoktorovaÖ®ÊÖ£©ÊÇÆäÖзdz£ÓÅÐãµÄÒ»¸ö¡£ÏÂ±í½«doT.jsÓëÆäËûͬÀàÒýÇæ×öÁ˶Աȣº

¿ÉÒÔ¿´³ö£¬doT.js±íÏÖÍ»³ö¡£¶øÇÒ£¬ËüµÄÐÔÄÜÒ²ºÜÓÅÐ㣬±¾ÈËÔÚMac ProÉϵÄÓÃChromeä¯ÀÀÆ÷£¨°æ±¾Îª£º56.0.2924.87£©ÉÏ×ö100ÌõÊý¾Ý10000´ÎäÖȾÐÔÄܲâÊÔ£¬½á¹ûÈçÏ£º

´ÓÉÏ¿ÉÒÔ¿´³ödoT.js¸üÖµµÃÍÆ¼ö£¬ËüµÄÖ÷ÒªÓÅÊÆÔÚÓÚ£º

СÇɾ«¼ò£¬Ô´´úÂë²»³¬¹ýÁ½°ÙÐУ¬6KBµÄ´óС£¬Ñ¹Ëõ°æÖ»ÓÐ4KB£»

Ö§³Ö±í´ïʽ·á¸»£¬º­¸Ç¼¸ºõËùÓÐÓ¦Óó¡¾°µÄ±í´ïʽÓï¾ä£»

ÐÔÄÜÓÅÐ㣻

²»ÒÀÀµµÚÈý·½¿â¡£

±¾ÎÄÖ÷Òª¶ÔdoT.jsµÄÔ´Âë½øÐзÖÎö£¬Ì½¾¿Ò»ÏÂÕâÀàÄ£°åÒýÇæµÄʵÏÖÔ­Àí¡£

ÈçºÎʹÓÃ

Èç¹û֮ǰÓùýdoT.js£¬¿ÉÒÔÌø¹ý´ËС½Ú£¬doT.jsʹÓÃʾÀýÈçÏ£º

<script type="text/html" id="tpl">
<div>
<a>name:{{= it.name}}</a>
<p>age:{{= it.age}}</p>
<p>hello:{{= it.sayHello() }}</p>
<select>
{{~ it.arr:item}}
<option {{?item.id == it.stringParams2}}selected{{?}} value="{{=item.id}}">
{{=item.text}}
</option>
{{~}}
</select>
</div>
</script>
<script>
$("#app").html(doT.template($("#tpl").html())({
name:'stringParams1',
stringParams1:'stringParams1_value',
stringParams2:1,
arr:[{id:0,text:'val1'},{id:1,text:'val2'}],
sayHello:function () {
return this[this.name]
}
}));
</script>

¿ÉÒÔ¿´³ödoT.jsµÄÉè¼ÆË¼Â·£º½«Êý¾Ý×¢Èëµ½Ô¤ÖõÄÊÓͼģ°åÖÐäÖȾ£¬·µ»ØHTML´úÂë¶Î£¬´Ó¶øµÃµ½×îÖÕÊÓͼ¡£

ÏÂÃæÊÇһЩ³£ÓÃÓï·¨±í´ïʽ¶ÔÕÕ±í£º

Ô´Âë·ÖÎö¼°ÊµÏÖÔ­Àí

ºÍºó¶ËäÖȾ²»Í¬£¬doT.jsµÄäÖȾÍêÈ«½»ÓÉǰ¶ËÀ´½øÐУ¬ÕâÑù×öÖ÷ÒªÓÐÒÔϺô¦£º

ÍÑÀëºó¶ËäÖȾÓïÑÔ£¬²»ÐèÒªÒÀÀµºó¶ËÏîÄ¿µÄÆô¶¯£¬´Ó¶ø½µµÍÁË¿ª·¢ñîºÏ¶È¡¢ÌáÉý¿ª·¢Ð§ÂÊ£»

View²ãäÖȾÂß¼­È«ÔÚJavaScript²ãʵÏÖ£¬ÈÝÒ×ά»¤ºÍÐ޸ģ»

Êý¾Ýͨ¹ý½Ó¿ÚµÃµ½£¬ÎÞÐ迼ÂǺó¶ËÊý¾ÝÄ£Ðͱ仯£¬Ö»Ðè¹ØÐÄÊý¾Ý¸ñʽ¡£

doT.jsÔ´ÂëºËÐÄ£º

...
// È¥µôËùÓÐÖÆ±í·û¡¢¿Õ¸ñ¡¢»»ÐÐ
str = ("var out='" + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ")
.replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""): str)
.replace(/'|\\/g, "\\$&")
.replace(c.interpolate || skip, function(m, code) {
return cse.start + unescape(code,c.canReturnNull) + cse.end;
})
.replace(c.encode || skip, function(m, code) {
needhtmlencode = true;
return cse.startencode + unescape(code,c.canReturnNull) + cse.end;
})
// Ìõ¼þÅжÏÕýÔòÆ¥Å䣬°üÀ¨ifºÍelseÅжÏ
.replace(c.conditional || skip, function(m, elsecase, code) {
return elsecase ?
(code ? "';}else if(" + unescape(code,c.canReturnNull) + "){out+='" : "';}else{out+='") :
(code ? "';if(" + unescape(code,c.canReturnNull) + "){out+='" : "';}out+='");
})
// Ñ­»·±éÀúÕýÔòÆ¥Åä
.replace(c.iterate || skip, function(m, iterate, vname, iname) {
if (!iterate) return "';} } out+='";
sid+=1; indv=iname || "i"+sid; iterate=unescape(iterate);
return "';var arr"+sid+"="+iterate+";if(arr"+sid+"){var "+vname+","+indv+"=-1,l"+sid+"
=arr"+sid+".length-1;while("+indv+"<l"+sid+"){"
+vname+"=arr"+sid+"["+indv+"+=1];out+='";
})
// ¿ÉÖ´ÐдúÂëÆ¥Åä
.replace(c.evaluate || skip, function(m, code) {
return "';" + unescape(code,c.canReturnNull) + "out+='";
})
+ "';return out;")
...

try {
return new Function(c.varname, str);//c.varname ¶¨ÒåµÄÊÇnew Function£¨£©·µ»ØµÄº¯ÊýµÄ²ÎÊýÃû
} catch (e) {
/* istanbul ignore else */
if (typeof console !== "undefined") console.log("Could not create a template function: " + str);
throw e;
}
...

Õâ¶Î´úÂë×ܽáÆðÀ´¾ÍÊÇÒ»¾ä»°£ºÓÃÕýÔò±í´ïʽƥÅäÔ¤ÖÃÄ£°åÖеÄÓï·¨¹æÔò£¬½«Æäת»»¡¢Æ´½ÓΪ¿ÉÖ´ÐÐHTML´úÂ룬×÷Ϊ¿ÉÖ´ÐÐÓï¾ä£¬Í¨¹ýnew Function()´´½¨µÄз½·¨·µ»Ø¡£

´úÂë½âÎöÖØµã1£ºÕýÔòÌæ»»

ÕýÔòÌæ»»ÊÇdoT.jsµÄºËÐÄÉè¼ÆË¼Â·£¬±¾ÎIJ»¶ÔÕýÔò±í´ïʽ×öÀ©³ä½²½â£¬½ö·ÖÎödoT.jsµÄÉè¼ÆË¼Â·¡£ÏÈÀ´¿´Ò»ÏÂdoT.jsÖÐÓõ½µÄÕýÔò£º

templateSettings: {
evaluate: /\{\{([\s\S]+?(\}?)+)\}\}/g, //±í´ïʽ
interpolate: /\{\{=([\s\S]+?)\}\}/g, // ²åÈëµÄ±äÁ¿
encode: /\{\{!([\s\S]+?)\}\}/g,
// ÔÚÕâÀï{{£¡²»ÊÇÓÃÀ´×öÅжϣ¬¶øÊǶÔÀïÃæµÄ´úÂë×ö±àÂë
use: /\{\{#([\s\S]+?)\}\}/g,
useParams: /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)
(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]
+\"|\'[^\']+\'|\{[^\}]+\})/g,
define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,// ×Ô¶¨Òåģʽ
defineParams:/^\s*([\w$]+):([\s\S]+)/, // ×Ô¶¨Òå²ÎÊý
conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g, // Ìõ¼þÅжÏ
iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)
\s*(?:\:\s*([\w$]+))?\s*\}\})/g, // ±éÀú
varname: "it", // ĬÈϱäÁ¿Ãû
strip: true,
append: true,
selfcontained: false,
doNotSkipEncoded: false // ÊÇ·ñÌø¹ýÒ»Ð©ÌØÊâ×Ö·û
}

Ô´ÂëÖн«ÕýÔò¶¨Òåдµ½Ò»Æð£¬ÕâÑù·½±ãÁËά»¤ºÍ¹ÜÀí¡£ÔÚÔçÆÚ°æ±¾µÄdoT.jsÖУ¬´¦ÀíÌõ¼þ±í´ïʽµÄ·½Ê½ºÍtmplÒ»Ñù£¬²ÉÓÃÖ±½ÓÌæ»»³É¿ÉÖ´ÐÐÓï¾äµÄÐÎʽ£¬ÔÚ×îа汾µÄdoT.jsÖУ¬Ð޸ijɽöÒ»ÌõÕýÔò¾Í¿ÉÒÔʵÏÖÌæ»»£¬±äµÃ¸ü¼Ó¼ò½à¡£

doT.jsÔ´ÂëÖжÔÄ£°åÖÐÓï·¨ÕýÔòÌæ»»µÄÁ÷³ÌÈçÏ£º

´úÂë½âÎöÖØµã2£ºnew Function()ÔËÓÃ

º¯Êý¶¨Òåʱ£¬Ò»°ãͨ¹ýFunction¹Ø¼ü×Ö£¬²¢Ö¸¶¨Ò»¸öº¯ÊýÃû£¬ÓÃÒÔµ÷Óá£ÔÚJavaScriptÖУ¬º¯ÊýÒ²ÊǶÔÏ󣬿ÉÒÔͨ¹ýº¯Êý¶ÔÏó£¨Function Object£©À´´´½¨¡£ÕýÈçÊý×é¶ÔÏó¶ÔÓ¦µÄÀàÐÍÊÇArray£¬ÈÕÆÚ¶ÔÏó¶ÔÓ¦µÄÀàÐÍÊÇDateÒ»Ñù£¬ÈçÏÂËùʾ£º

var funcName = new Function(p1,p2,...,pn,body);

²ÎÊýµÄÊý¾ÝÀàÐͶ¼ÊÇ×Ö·û´®£¬p1µ½pn±íʾËù´´½¨º¯ÊýµÄ²ÎÊýÃû³ÆÁÐ±í£¬body±íʾËù´´½¨º¯ÊýµÄº¯ÊýÌåÓï¾ä£¬funcName¾ÍÊÇËù´´½¨º¯ÊýµÄÃû³Æ£¨¿ÉÒÔ²»Ö¸¶¨ÈκβÎÊý´´½¨Ò»¸öÄäÃûº¯Êý£©¡£

ÏÂÃæµÄ¶¨ÒåÊǵȼ۵ġ£

ÀýÈ磺

// Ò»°ãº¯Êý¶¨Ò巽ʽ
function func1(a,b){
return a+b;
}
// ²ÎÊýÊÇÒ»¸ö×Ö·û´®Í¨¹ý¶ººÅ·Ö¸ô
var func2 = new Function('a,b','return a+b');
// ²ÎÊýÊǶà¸ö×Ö·û´®
var func3 = new Function('a','b','return a+b');
// Ò»ÑùµÄµ÷Ó÷½Ê½
console.log(func1(1,2));
console.log(func2(2,3));
console.log(func3(1,3));
// Êä³ö
3 // func1
5 // func2
4 // func3

´ÓÉÏÃæµÄ´úÂëÖпÉÒÔ¿´³ö£¬FunctionµÄ×îºóÒ»¸ö²ÎÊý£¬±»×ª»»Îª¿ÉÖ´ÐдúÂ룬ÀàËÆevalµÄ¹¦ÄÜ¡£evalÖ´ÐÐʱ´æÔÚä¯ÀÀÆ÷ÐÔÄÜϽµ¡¢µ÷ÊÔÀ§ÄÑÒÔ¼°¿ÉÄÜÒý·¢XSS£¨¿çÕ¾£©¹¥»÷µÈÎÊÌ⣬Òò´Ë²»ÍƼöʹÓÃevalÖ´ÐÐ×Ö·û´®´úÂ룬new Function()Ç¡ºÃ½â¾öÁËÕâ¸öÎÊÌâ¡£»Ø¹ýÍ·À´¿´doT´úÂëÖеġ±new Function(c.varname, str)¡±£¬¾Í²»ÄÑÀí½âvarnameÊÇ´«Èë¿ÉÖ´ÐÐ×Ö·û´®strµÄ±äÁ¿¡£

¾ßÌ幨ÓÚnew FcuntionµÄ¶¨ÒåºÍÓ÷¨£¬ÏêϸÇëÔĶÁFunctionÏêϸ½éÉÜ¡£

ÐÔÄÜÖ®Òò

¶Áµ½ÕâÀï¿ÉÄÜ»á²úÉúÒ»¸öÒÉÎÊ£ºdoT.jsµÄÐÔÄÜΪʲôÔÚÖÚ¶àÒýÇæÈç´ËÍ»³ö£¿Í¨¹ýÔĶÁÆäËûÒýÇæÔ´´úÂ룬·¢ÏÖÁËËüÃǺËÐÄ´úÂë¶ÎÖж¼´æÔÚÕâÑùÄÇÑùµÄÎÊÌâ¡£

jQuery-tmpl

function buildTmplFn( markup ) {
return new Function("jQuery","$item",
// Use the variable __ to hold a string array while building the compiled template.
(See https://github.com/jquery/jquery-tmpl/issues#issue/10).
"var $=jQuery,call,__=[],$data=$item.data;" +

// Introduce the data as local variables using with(){}
"with($data){__.push('" +

// Convert the template into pure JavaScript
jQuery.trim(markup)
.replace( /([\\'])/g, "\\$1" )
.replace( /[\r\t\n]/g, " " )
.replace( /\$\{([^\}]*)\}/g, "{{= $1}}" )
.replace( /\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,
function( all, slash, type, fnargs, target, parens, args ) {
//Ê¡ÂÔ²¿·ÖÄ£°åÌæ»»Óï¾ä,ÈôÒªÔĶÁÈ«²¿´úÂëÇë·ÃÎÊ:https://github.com/BorisMoore/jquery-tmpl
}) +
"');}return __;"
);
}

ÔÚÉÏÃæµÄ´úÂëÖп´µ½£¬jQuery-temlͬÑùʹÓÃÁËnew Function()µÄ·½Ê½±àÒëÄ£°å£¬µ«ÊÇÔÚÐÔÄܶԱÈÖÐjQuery-temlÐÔÄÜÏà±ÈdoT.jsÏà²îÉõÔ¶£¬³öÏÖÐÔÄÜÆ¿¾±µÄ¹Ø¼üÔÚÓÚwithÓï¾äµÄʹÓá£

withÓï¾äΪʲô¶ÔÐÔÄÜÓÐÕâô´óµÄÓ°Ï죿ÎÒÃÇÀ´¿´ÏÂÃæµÄ´úÂ룺

var datas = {persons:['ÀîÃ÷','Сºì','ÕÔËÄ','ÍõÎå','ÕÅÈý','ËïÐÐÕß','ÂíÆÅ×Ó'],
gifts:['ƽÃñ','Î×ʦ','ÀÇ','ÁÔÈË','ÏÈÖª']};
function go(){
with(datas){
var personIndex = 0,giftIndex = 0,i=100000;
while(i){
personIndex = Math.floor(Math.random()*persons.length);
giftIndex = Math.floor(Math.random()*gifts.length)
console.log(persons[personIndex] +'µÃµ½ÁËеÄÉí·Ý:'+ gifts[giftIndex]);
i--;
}
}
}

ÉÏÃæ´úÂëÖÐʹÓÃÁËÒ»¸öwith±í´ïʽ£¬ÎªÁ˱ÜÃâ¶à´Î´ÓdatasÖÐÈ¡±äÁ¿¶øÊ¹ÓÃÁËwithÓï¾ä¡£Õâ¿´ÆðÀ´ËƺõÌáÉýÁËЧÂÊ£¬µ«È´²úÉúÁËÒ»¸öÐÔÄÜÎÊÌ⣺ÔÚJavaScriptÖÐÖ´Ðз½·¨Ê±»á²úÉúÒ»¸öÖ´ÐÐÉÏÏÂÎÄ£¬Õâ¸öÖ´ÐÐÉÏÏÂÎijÖÓи÷½·¨×÷ÓÃÓòÁ´£¬Ö÷ÒªÓÃÓÚ±êʶ·û½âÎö¡£µ±´úÂëÁ÷Ö´Ðе½Ò»¸öwith±í´ïʽʱ£¬ÔËÐÐÆÚÉÏÏÂÎĵÄ×÷ÓÃÓòÁ´±»ÁÙʱ¸Ä±äÁË£¬Ò»¸öеĿɱä¶ÔÏ󽫱»´´½¨£¬Ëü°üº¬Ö¸¶¨¶ÔÏóµÄËùÓÐÊôÐÔ¡£´Ë¶ÔÏó±»²åÈëµ½×÷ÓÃÓòÁ´µÄ×îǰ¶Ë£¬Òâζ×ÅÏÖÔÚº¯ÊýµÄËùÓоֲ¿±äÁ¿¶¼±»ÍÆÈëµÚ¶þ¸ö×÷ÓÃÓòÁ´¶ÔÏóÖУ¬ÕâÑù·ÃÎÊdatasµÄÊôÐԷdz£¿ì£¬µ«ÊÇ·ÃÎʾֲ¿±äÁ¿µÄËÙ¶ÈÈ´±äÂýÁË£¬ËùÒÔ·ÃÎÊ´ú¼Û¸ü¸ßÁË£¬ÈçÏÂͼËùʾ¡£

Õâ¸ö²å¼þÔÚGitHubÉÏÃæ½éÉÜʱ£¬×÷ÕßBoris Moore×ÅÖØÇ¿µ÷Á½µãÉè¼ÆË¼Â·£º

Ä£°å»º´æ£¬ÔÚÄ£°åÖØ¸´Ê¹ÓÃʱ£¬Ö±½ÓʹÓÃÄÚ´æÖлº´æµÄÄ£°å¡£ÔÚ±¾ÎÄ×÷Õß¿´À´£¬ÕâÊÇÒ»¸ö¼¦ÀߵŦÄÜ£¬ÔÚʵ¼ÊʹÓÃÖУ¬ÎÞÂÛÊÇÖ±½ÓдÔÚStringÖеÄÄ£°å»¹ÊÇ´ÓDom»ñÈ¡µÄÄ£°å¶¼»áÒÔ±äÁ¿µÄÐÎʽ´æ·ÅÔÚÄÚ´æÖУ¬±äÁ¿Ê¹Óõõ±£¬ÔÚÒ³ÃæÕû¸öÉúÃüÖÜÆÚÄÚ¶¼ÄÜÈ¡µ½Õâ¸öÄ£°å¡£Í¨¹ýÔ´Âë·ÖÎöÖ®ºó·¢ÏÖjQuery-tmplµÄÄ£°å»º´æ²¢²»ÊǶÔÄ£°å±àÒë½á¹û½øÐлº´æ£¬²¢ÇÒ»áÔì³É¶à´ÎÖ´ÐÐäÖȾʱ²úÉú¶à´Î±àÒ룬ÔÙ¼ÓÉÏ´úÂëwithÐÔÄÜÏûºÄ£¬ÑÏÖØÍÏÂýÕû¸öäÖȾ¹ý³Ì¡£

Ä£°å±ê¼Ç£¬¿ÉÒÔ´Ó»º´æÄ£°åÖÐÈ¡³ö¶ÔÓ¦×ӽڵ㡣ÕâÊÇÒ»¸ö²»´íµÄÉè¼ÆË¼Â·£¬¿ÉÒÔʵÏÖÊý¾Ý¸Ä±äÖ»ÖØÐÂäÖȾ¾Ö²¿½çÃæµÄ¹¦ÄÜ¡£µ«ÊÇÎÒ¾õµÃ£ºÄ£°å½«äÖȾ½á¹û½»¸ø¿ª·¢Õߣ¬²¢äÖȾµ½½çÃæÖ¸¶¨Î»ÖÃÖ®ºó£¬Ä£°åÒýÇæµÄ¹¤×÷¾ÍÓ¦¸Ã½áÊøÁË£¬Ê£ÏµĶԽڵã²Ù×÷Ó¦¸ÃÁé»îµÄÕÆÎÕÔÚ¿ª·¢ÕßÊÖÉÏ¡£

²»¸Ä±äÔ­À´Éè¼ÆË¼Â·»ù´¡Ö®ÉÏ£¬³¢ÊÔ¶ÔÔ´´úÂë½øÐÐÐÔÄÜÌáÉý¡£

Ïȱ£ÁôÌáÉýǰÐÔÄÜ×÷Ϊ¶Ô±È£º

Ê×ÏÈÀ´ÎÒÃÇ×öµÚÒ»´ÎÐÔÄÜÌáÉý£¬ÒƳýÔ´ÂëÖÐwithÓï¾ä¡£

µÚÒ»´ÎÌáÉýºó£º

½ÓÏÂÀ´µÚ¶þ²¿ÌáÉý£¬ÂäʵBoris MooreÉè¼ÆÀíÄîÖеÄÄ£°å»º´æ£º

ÓÅ»¯ºóµÄÕâÒ»²¿·Ö´úÂë¶Î±»ÎÒÃÇÐ޸ijÉÁË£º

 function buildTmplFn( markup ) {

if(!compledStr){
// Convert the template into pure JavaScript
compledStr = jQuery.trim(markup)
.replace( /([\\'])/g, "\\$1" )
.replace( /[\r\t\n]/g, " " )
.replace( /\$\{([^\}]*)\}/g, "{{= $1}}" )
.replace( /\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,
//Ê¡ÂÔ²¿·ÖÄ£°åÌæ»»Óï¾ä
}

return new Function("jQuery","$item",
// Use the variable __ to hold a string array while building the compiled template. (See https://github.com/jquery/jquery-tmpl/issues#issue/10).
"var $=jQuery,call,__=[],$data=$item.data;" +

// Introduce the data as local variables using with(){}
"__.push('" + compledStr +
"');return __;"
)
}

ÔÚdoT.jsÔ´ÂëÖÐûÓÐÓõ½withÕâÀàÏûºÄÐÔÄܵÄÓï¾ä£¬Óë´ËͬʱdoT.jsÑ¡ÔñÏȽ«Ä£°å±àÒë½á¹û·µ»Ø¸ø¿ª·¢Õߣ¬ÕâÑùÈçÒªÖØ¸´¶à´ÎʹÓÃͬһģ°å½øÐÐäÖȾ±ã²»»á·´¸´±àÒë¡£

½ö25ÐеÄÄ£°å£ºtmpl

(function(){
var cache = {};

this.tmpl = function (str, data){
var fn = !/\W/.test(str) ?
cache[str] = cache[str] ||
tmpl(document.getElementById(str).innerHTML) :

new Function("obj",
"var p=[],print=function(){p.push.apply(p,arguments);};" +
"with(obj){p.push('" +

str
.replace(/[\r\t\n]/g, " ")
.split("<%").join("\t")
.replace(/((^|%>)[^\t]*)'/g, "$1\r")
.replace(/\t=(.*?)%>/g, "',$1,'")
.split("\t").join("');")
.split("%>").join("p.push('")
.split("\r").join("\\'")
+ "');}return p.join('');");

return data ? fn( data ) : fn;
};
})();

ÔĶÁÕâ¶Î´úÂë»á¾ªÆæµÄ·¢ÏÖ£¬Ëü¸üÏñÊÇbaiduTemplate¾«¼ò°æ¡£Ïà±ÈbaiduTemplate¶øÑÔ£¬ËüÒÆ³ýÁËbaiduTemplateµÄ×Ô¶¨ÒåÓï·¨±êÇ©µÄ¹¦ÄÜ£¬Ê¹µÃ´úÂë¸ü¼Ó¾«¼ò£¬Ò²±Ü¿ªÁËÌæ»»Óû§Óï·¨±êÇ©¶ø´øÀ´µÄÐÔÄÜÏûºÄ¡£¶ÔÓÚdoT.jsÀ´Ëµ£¬ÐÔÄÜÎÊÌâµÄ¹Ø¼üÊÇwithÓï¾ä¡£

×ÛºÏÉÏÊöÎÒ¶ÔtmplµÄÔ´Âë½øÐÐÒÆ³ýwithÓï¾ä¸ÄÔ죺

¸ÄÔì֮ǰÐÔÄÜ£º

¸ÄÔìÖ®ºóÐÔÄÜ£º

Èç¹û¶ÁÕß¶ÔÐÔÄܶԱÈÔ´Âë±È½Ï¸ÐÐËȤ¿ÉÒÔ·ÃÎÊ£º https://github.com/chen2009277025/TemplateTest ¡£

×ܽá

ͨ¹ý¶ÔdoT.jsÔ´ÂëµÄ½â¶Á£¬ÎÒÃÇ·¢ÏÖ£º

doT.jsµÄÌõ¼þÅжÏÓï·¨±êÇ©²»Ö±¹Û¡£µ±¿ª·¢ÕßÔÚʹÓùý³ÌÖÐÌõ¼þÅжÏǶÌ×¹ý¶àʱ£¬ºÜÄÑÕÒµ½¶ÔÓ¦µÄ½áÊøÓï·¨·ûºÅ£¬¿ª·¢ÕßÐèÒª×Ô¼ºÑϸñ¹æ·¶´úÂëÊéд£¬·ñÔò»á¸ø¿ª·¢ºÍά»¤´øÀ´À§ÄÑ¡£

doT.jsÏÞÖÆ¿ª·¢Õß×Ô¶¨ÒåÓï·¨±êÇ©£¬Ïà±È½ÏÖ®ÏÂbaiduTemplateÌṩ¿É×Ô¶¨Òå±êÇ©µÄ¹¦ÄÜ£¬¶øbaiduTemplateµÄÐÔÄÜÆ¿¾±Ç¡ºÃÊÇÌṩ×Ô¶¨ÒåÓï·¨±êÇ©µÄ¹¦ÄÜ¡£

ºÜ¶à½â¾öÎÒÃÇÎÊÌâµÄ²å¼þµÄ´úÂëÍùÍù¼òµ¥Ã÷ÁË£¬ÄÇЩÅÓ´óµÄ²å¼þ·´¶ø´æÔÚ¸ºÃæÓ°Ïì»òÎÞÓù¦ÄÜ¡£¼¼ÊõÁìÓòÓÐÒ»¸öÈí¼þÉè¼Æ·¶Ê½£º¡°Ô¼¶¨´óÓÚÅäÖá±£¬Ö¼ÔÚ¼õÉÙÈí¼þ¿ª·¢ÈËÔ±ÐèÒª×ö¾ö¶¨µÄÊýÁ¿£¬×öµ½¼òµ¥¶øÓÖ²»Ê§Áé»î¡£ÔÚ²å¼þ±àд¹ý³ÌÖпª·¢ÕßÓ¦¶à×¢ÒâʹÓó¡¾°ºÍÐÔÄܵÄÓлú½áºÏ£¬Ê¹ÓÃÇ¡µ±µÄÓï·¨£¬¾¡¿ÉÄܼõÉÙ¿ª·¢ÕßµÄÅäÖ㬲»ÇóÓ­ºÏ¸÷¸ö³¡¾°¡£

 

   
1574 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

¹È¸è½ÌÄãÈçºÎ¹¹½¨Ò»¸öÓÅÐãµÄÒÆ¶¯ÍøÕ¾
ÈçºÎ¸ßЧµØ¹ÜÀíÍøÕ¾¾²Ì¬×ÊÔ´
¸ßÐÔÄÜÍøÕ¾½¨ÉèµÄ×î¼Ñʵ¼ù
Ïл°ÍøÕ¾×ó²àµ¼º½µÄʵÏÖ
 
Ïà¹ØÎĵµ

ÍøÕ¾½¨Éè·½°¸Á÷³Ì
ÍøÕ¾½¨Éècss½Ì³Ì
ÆóÒµÍøÕ¾½¨ÉèÓëÍÆ¹ã
ÍøÕ¾½¨Éè·½°¸Êé
Ïà¹Ø¿Î³Ì

Éè¼ÆÄ£Ê½Ô­ÀíÓëÓ¦ÓÃ
´ÓÐèÇó¹ý¶Éµ½Éè¼Æ
Èí¼þÉè¼ÆÔ­ÀíÓëʵ¼ù
ÈçºÎ±àд¸ßÖÊÁ¿´úÂë
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Ê®Ììѧ»áDIV+CSS(WEB±ê×¼)
HTML 5µÄ¸ïУº½á¹¹Ö®ÃÀ
½éÉÜ27¿î¾­µäµÄCSS¿ò¼Ü
35¸öÓд´ÒâµÄ404´íÎóÒ³Ãæ
×îÈÝÒ×·¸µÄ13¸öJavaScript´íÎó
Éè¼ÆÒ×Àí½âºÍ²Ù×÷µÄÍøÕ¾

Éè¼ÆÄ£Ê½Ô­ÀíÓëÓ¦ÓÃ
´ÓÐèÇó¹ý¶Éµ½Éè¼Æ
Èí¼þÉè¼ÆÔ­ÀíÓëʵ¼ù
ÈçºÎ±àд¸ßÖÊÁ¿´úÂë
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
Èí¼þ¿ª·¢¹ý³ÌÖ¸ÄÏ

¶«Èí¼¯ÍÅ ´úÂëÖØ¹¹
ij½ðÈÚÈí¼þ·þÎñÉÌ ¼¼ÊõÎĵµ
Öдïµçͨ Éè¼ÆÄ£Ê½Ô­ÀíÓëʵ¼ù
·¨¹úµçÐÅ ¼¼ÊõÎĵµ±àдÓë¹ÜÀí
Î÷ÃÅ×Ó Ç¶ÈëʽÉè¼ÆÄ£Ê½
ÖÐд󶫷½ÈËÊÙ ¼¼ÊõÎĵµ±àд