2011-06-22 12 views
24

Me gustaría usar mustache.js con jQuery en mi aplicación HTML5, pero no puedo hacer que todos los componentes funcionen juntos. Todos los archivos se encuentran, no hay problema aquí (la plantilla está cargada roght, puedo ver su valor en el debugguer Firebug).Mustache.js + jQuery: ¿cuál es el ejemplo mínimo de trabajo?

Aquí es mi index.html:

<!DOCTYPE html> 
<html lang="fr"> 
    <head><meta charset="utf-8"></head> 
    <body> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> 
     <script src="../js/jquery.mustache.js"></script> 
     <script src="../js/app.js"></script> 
     <div id="content"></div> 
    </body> 
</html> 

Aquí está mi archivo app.js:

$(document).ready(function() { 
    var template = $.get('../templates/article.mustache'); 
    $.getJSON('../js/article.json', function(view) { 
     var html = Mustache.to_html(template, view); 
     $("#content").append(html); 
    }); 
}); 

El archivo jquery.mustache.js es la generada a partir https://github.com/janl/mustache.js:

/* 
Shameless port of a shameless port 
@defunkt => @janl => @aq 

See http://github.com/defunkt/mustache for more info. 
*/ 

;(function($) { 

// <snip> mustache.js code 

    $.mustache = function(template, view, partials) { 
    return Mustache.to_html(template, view, partials); 
    }; 

})(jQuery); 

Observación aparece. Firebug me dice

bigote no está definido

Ver captura: enter image description here

sé que falta algo, pero no puedo decir qué.

Gracias.


EDITAR: La respuesta correcta y completa a un mínimo ejemplo es la siguiente:

  • escribir la plantilla en el guión, no se cargan desde un archivo
  • idem para los datos json
  • lea cómo se genera el jQuery y use la función $.mustache.to_html en lugar del (documentado en githu b) Mustache.to_html (gracias a @mikez302)
  • refactor 'hasta el cansancio
 
$(document).ready(function() { 
    var template = " ... {{title}} ... "; 
    var json = {title: "titre article" } 
    var article = $.mustache(template, json); 
    $("#content").append(article); 
}); 

embargo, es fácil de leer el JSON desde otro archivo:

 
$(document).ready(function() { 
    var template = " ... {{title}} ... "; 
    $.getJSON('../js/article.json', function(view) { 
    var article = $.mustache(template, view); 
    $("#content").append(article); 
    }); 
}); 

que finalmente puede también leer la plantilla de un archivo:

 
$(document).ready(function() { 
    $.getJSON('../js/article.json', function(view) { 
    $.get("../templates/article.mustache", function(template) { 
     var article = $.mustache(template, view); 
     $("#content").append(article); 
    }); 
    }); 
}); 

Ejemplo de trabajo (sin l problemas de orden oading):

 
$(document).ready(function() { 
    $.getJSON('../js/article.json', function(model) { return onJSON(model); }); 
}); 

function onJSON(model) { 
    $.get("../templates/article.mustache", function(view) { 
    var article = $.mustache(view, model); 
    $("#content").append(article); 
    }); 
} 
+1

yo pondría todo el JavaScript ** ** después el contenido. [LINK] (http://developer.yahoo.com/blogs/ydn/posts/2007/07/high_performanc_5/) – Sparky

+0

gracias por la sugerencia. No estoy buscando la optimización en este momento, quiero que mi código funcione. –

+4

Lo publiqué como comentario y no como respuesta. Por supuesto, el ** pedido ** en el que carga su secuencia de comandos incluye _also_ es importante para que el código funcione. Si eres un principiante en JavaScript, esta información es una "lectura obligatoria" crítica. ¿Todos los principiantes saben que deben cargar jQuery antes de que carguen jQueryUI o cualquier otro plugin jQuery? – Sparky

Respuesta

11

En lugar de Mustache.to_html, tratan $.mustache. Me parece que la variable Mustache se define dentro de la función, por lo que no es directamente accesible fuera de ella.

6

Sé que esta pregunta ya ha sido respondida, sin embargo escribí una publicación en el blog sobre precisamente este tema y pensé que la compartiría aquí para que cualquiera que esté buscando ejemplos de cómo usar Moustache con jQuery pueda verla.

http://blog.xoundboy.com/?p=535

+1

Un par de años más tarde, probablemente como era de esperar, pero quería hacerte saber que el enlace de tu blog está muerto. – Prefix

+0

@Prefix gracias por el aviso, solo leí este comentario, disculpe el retraso. De todos modos, está de vuelta ahora :) – Xoundboy

Cuestiones relacionadas