2010-04-15 16 views
5

Tengo problemas con las plantillas de John Resig.Error de sintaxis con Micro Templating de John Resig después de cambiar las etiquetas de plantilla <# {% {{etc

¿Alguien me puede ayudar con por qué no está funcionando?

Esta es la plantilla

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

Y la sección modificada del motor

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

y el Javascript

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

y el resultado, como se puede ver = Identificación y = nombre parece estar en el lugar equivocado? Además de cambiar los bloques de sintaxis de plantilla de <%%> a {%%}, no he cambiado nada.

Esto es 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

Me puse muy confundido cuando llegué a las palabras "la sección modificada del motor". – Pointy

Respuesta

2

Cuando haya modificado el motor, que se olvidó de cambiar estas líneas:

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

a esto:

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

Para cambiar las etiquetas en la biblioteca Micro-Plantilla de John Resig, se debe cambiar dos llamadas de división() y las dos expresiones regulares del código original.

Por ejemplo, cambiar las etiquetas originales <% =%> a {{=}} se hace igual que

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

Tenga cuidado al cambiar las expresiones regulares en el motor, que debe escapar characteres especiales. En javascript sabor de regexp, estos son: \/[]() {}? + * | .^$ Escápelos prefijándolos con "\". Esto no se aplica a los parametros de división ya que no son expresiones regulares en este caso.

Cuestiones relacionadas