2010-04-15 8 views
5

J'ai un peu de mal avec le Micro Templating de John Resig.Erreur de syntaxe avec Micro Templating de John Resig après la modification des balises de gabarit <# {% {{etc

Quelqu'un peut-il m'aider avec pourquoi cela ne fonctionne pas?

C'est le modèle

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

Et la section modifiée du moteur

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

et le javascript

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

et le résultat, comme vous pouvez le voir = id et = le nom semble être au mauvais endroit? En dehors de changer les blocs de syntaxe du modèle de <%%> à {%%} je n'ai rien changé.

Ceci est de Firefox.

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

Je suis vraiment confus quand je suis arrivé aux mots "la section modifiée du moteur". – Pointy

Répondre

2

Lorsque vous avez modifié le moteur, vous avez oublié de changer ces lignes:

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

à ceci:

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

Pour modifier les balises dans la bibliothèque Micro-modèle de John Resig, vous doit modifier deux appels split() et les deux expressions régulières du code d'origine.

Par exemple, en changeant les étiquettes originales < de% =%> à {{=}} est fait comme si

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

Attention lors du changement des expressions régulières dans le moteur, vous devez échapper caracteres spéciales. Dans la saveur javascript de regexp, ce sont: \/[]() {}? + * | .^ Échappez-les en les préfixant avec "\". Ceci ne s'applique pas aux params split car ils ne sont pas regexp dans ce cas.