2009-09-28 5 views
19

Así que he visto esta publicación en JavaScript Micro-Templating de John Resig y necesito un motor de micro-plantillas como este.¿Algún avance en "JavaScript Micro-Templating" de John Resig?

Pero él dice en el post que mantendrá una versión más refinada en su libro de secretos del libro ninja de JavaScript y también menciona que le gustaría ver que evoluciona.

Así que me pregunto, ¿hay una versión más estable/avanzada de este motor de micro-plantilla de John Resig? Si es así, ¿cómo puedo obtenerlo? Ese libro de JavaScript no está disponible en mi país.

Respuesta

5

Definitivamente puede comprar el pdf en línea cuando se trata, como señala @James, independientemente de su país de residencia.

no es una avanzada versión más estable/ de este motor micro-plantillas por John Resig?

Ver Rick Stahl's blog (en un montón de motores de plantilla clientside) en la que corrige un problema con comillas simples en el motor de micro-Plantillas de Resig. Esa es la única mejora de la fuente que he visto.

+0

Lo estoy usando ahora, es genial. Aunque me hizo escribir esta locura: $ ("input"). Each (function() { eval ("data." + $ (This) .attr ("id") + "= \" "+ $ (this) .val() + "\"; "); }); (Esto configura un objeto 'data' con valores de todos los campos de entrada, que luego paso a la función de plantilla, para que sea muy conveniente acceder a los valores de campo.) –

+1

@Steve: 'var data = {}; $ ("input"). each (function() {data [this.id] = this.value}); 'Ver http://stackoverflow.com/questions/1184123/is-it-possible-to-add- dynamically-named-properties-to-javascript-object –

+0

ew, ¿qué estaba pensando? Gracias. –

3

también ver jQote2. Voy a citar del sitio en sí:

jQote (pronunciado como Chakotey de Star Trek) es básicamente una reescritura de la utilidad JavaScript Micro-Templating impresionante de John Resig. Tomé su código y lo porté a jQuery, repasé la parte de análisis/conversión y extendí su funcionalidad para minimizar los esfuerzos de codificación de todos.

1

Este es el guión de John Resig (ligeramente modificada), la de una tela de Rick Strahl (http://weblog.west-wind.com/posts/2008/Oct/13/Client-Templating-with-jQuery)

var _tmplCache = {} 
this.tmpl= function(str, data) { 
/// <summary> 
/// Client side template parser that uses &lt;#= #&gt; and &lt;# code #&gt; expressions. 
/// and # # code blocks for template expansion. 
/// NOTE: chokes on single quotes in the document in some situations 
///  use &amp;rsquo; for literals in text and avoid any single quote 
///  attribute delimiters. 
/// </summary>  
/// <param name="str" type="string">The text of the template to expand</param>  
/// <param name="data" type="var"> 
/// Any data that is to be merged. Pass an object and 
/// that object's properties are visible as variables. 
/// </param>  
/// <returns type="string" /> 
var err = ""; 
try { 
    var func = _tmplCache[str]; 
    if (!func) { 
     var strFunc = 
     "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('');"; 

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

     //alert(strFunc); 
     func = new Function("obj", strFunc); 
     _tmplCache[str] = func; 
    } 
    return func(data); 
} catch (e) { err = e.message; } 
return "< # ERROR: " + err.htmlEncode() + " # >"; 
} 

Puede ser utilizado como esto: tmpl ($ ('myHtmlTempl') .html(), datos);

Lo probé y funciona con "comillas simples" (ese fue mi problema principal hasta que encontré este). Esta versión está lista para trabajar con etiquetas < # #>.

Cuestiones relacionadas