2010-04-15 13 views
5

John Resig'in Mikro sıcaklıkla ilgili bir sorun yaşıyorum.John Resig'in Mikro Etiketlemeyle İlgili Sözdizimi Hatası <# {% {{etc

Neden kimse bana yardım etmiyor?

Bu

, şablon

<script type="text/html" id="row_tmpl"> 
test content {%=id%} {%=name%} 
</script> 

Ve motorun

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('');"); 

değiştirilmiş bölümü ve javascript

var dataObject = { "id": "27", "name": "some more content" }; 
var html = tmpl("row_tmpl", dataObject); 

ve sonucudur Gördüğünüz gibi = id ve = İsim yanlış yerde mi görünüyor? Şablon sözdizimi bloklarını < %%> - {%%} olarak değiştirmekten başka hiçbir şey değiştirmedim.

Bu Firefox'tan. ,

.replace(/((^|%\})[^\t]*)'/g, "$1\r") 
    .replace(/\t=(.*?)%\}/g, "',$1,'") 
+0

"Motorun değiştirilmiş bölümü" sözüne geldiğimde gerçekten kafam karıştı. – Pointy

cevap

2

, sen bu satırları değiştirmek için unuttum iki bölme() çağrısını ve orijinal koddaki iki normal ifadeyi değiştirmelidir. için orijinal etiketleri =% <%> değişen Örneğin

, {{=}} motorda normal ifadeler değiştirirken dikkatli olun, böylece

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

//INTO 
str 
    .replace(/[\r\t\n]/g, " ") 
    .split("{{").join("\t")    //INTO string "{{" 
    .replace(/((^|\}\})[^\t]*)'/g, "$1\r") //INTO expression /((^|\}\})[^\t]*)'/g 
    .replace(/\t=(.*?)\}\}/g, "',$1,'") //INTO expression /\t=(.*?)\}\}/g 
    .split("\t").join("');") 
    .split("}}").join("p.push('")   //INTO string "}}" 
    .split("\r").join("\\'") 

gibi yapılır, özel parametreleri; kaçmak gerekir. Regexp'in javascript lezzeti, bunlar: \/[]() {}? + * | .^$ Onları "\" ile önekleyerek onlardan kaçış. Bu durum, bu durumda regexp olmadıkları için bölünmüş paramslar için geçerli değildir.

6

John Resig en Mikro Şablon Kütüphanesi'nde etiketleri değiştirmek için size: Buna

.replace(/((^|%>)[^\t]*)'/g, "$1\r") 
    .replace(/\t=(.*?)%>/g, "',$1,'") 

: motoru modifiye zaman

Error: syntax error 
Line: 30, Column: 89 
Source Code: 
var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push(' test content ');=idp.push(' ');=namep.push(' ');}return p.join('');