2012-01-13 13 views
5

que estoy tratando a la plantilla de la siguiente matriz de objetos:bigote de plantillas con una serie de objetos

var arr = [{name:"Ryan Pays", url:"http://www.ryanpays.com"}, {name:"foo", url:"http://www.google.com"}]; 

que convertir esa matriz a un objeto de este modo:

arr = $.extend({}, arr); 

Lo que me da el siguiente objeto:

{ 
0:{name:"Ryan Pays", url:"http://www.ryanpays.com"}, 
1:{name:"foo", url:"http://www.google.com"} 
} 

Usando Moustache quiero enumerar sobre ese objeto con la siguiente plantilla:

var template = "<h4>Your friends' choices</h4>" + 
       "<ul>" + 
       "<li>" + 
       "<p><strong>{{name}}</strong> likes <a href='{{url}}'>this</a></p>" + 
       "</li>" + 
       "</ul>"; 
var html = Mustache.to_html(template, displayData); 
$('.choices').html(html); 

Parece que no puedo hacer eso. Puedo obtener el primer resultado como para imprimir así:

var html = Mustache.to_html(template, displayData[0]); 

Y así sucesivamente, pero no tanto.

Enlace al violín de este tema:

http://jsfiddle.net/AtJDa/

+8

"Bigote I usted una pregunta .." - lo siento, no pude resistir – bobobobo

+0

Mis lados están dividiendo :) – RyanP13

Respuesta

16

Se puede usar la plantilla para las matrices:

var template = "<h4>Your friends' choices</h4>" + 
    "<ul>" + 
      "{{#arr}}"+ 
      "<li>" + 
      "<p><strong>{{name}}</strong> likes <a href='{{url}}'>this</a></p>" + 
      "</li>" + 
      "{{/arr}}"+ 
    "</ul>"; 
var html = Mustache.to_html(template, {arr:arr}); 
+0

que funciona como un encanto. Ni siquiera puedo ver esta característica documentada. ¿Como funciona esto? – RyanP13

+0

Lo siento, veo lo que está pasando ahora :) – RyanP13

+0

Gracias nikoshr, esto resolvió mi problema cuando se trabaja con un feed JSON producido por github .. – Zander

5

Es necesario utilizar del bigote incorporado en las capacidades de iteración:

var template = "<h4>Your friends' choices</h4>" + 
       "<ul>{{#friends}}" + 
       "<li>" + 
        "<p><strong>{{name}}</strong> likes <a href='{{url}}'>this</a></p>" + 
       "</li>" + 
       "{{/friends}}</ul>"; 

var data = {friends: [{name:"Ryan Pays", url:"http://www.ryanpays.com"}, {name:"foo", url:"http://www.google.com"}]}; 

var html = Mustache.to_html(template, data); 

http://jsfiddle.net/AtJDa/1/

el ingrediente secreto está en la declaración de la sección {{#friends}}

+0

Realmente no tengo acceso al objeto en ese nivel en la aplicación. Mi mal por no especificar eso en la pregunta original. – RyanP13

+0

Estoy teniendo el mismo problema y sé cuál es la solución (use la iteración incorporada) pero mi problema es que no tengo "Manejar" en los datos como "amigos" en su ejemplo. Al mirar el JSON devuelto en Firebug, no hay ningún nombre en la matriz JSON. Mi colección simplemente comienza como '[{name:" Ryan Pays ",' not '{friends: [{name:" Ryan Pays ",' ¿hay algo que pueda hacer en mi servidor WebAPI para ponerle nombre a la colección? – Jammer

Cuestiones relacionadas