2012-04-02 22 views
5

Dadas este hashCómo iterar sobre un hash en mustache.js

a = { 
    foo : { ... }, 
    bar : { ... }, 
    zap : { ... } 
} 

quiero iterar sobre ella, pero ya que las claves son diferentes no estoy seguro de cómo en Mustache.js

la salida será algo como esto foo: (contenidos aquí)

+0

¿Puedes detallar esto un poco? ¿Quieres iterar los elementos de 'foo',' bar' y 'zap' o las teclas en sí? – ZeissS

+0

@ZeissS editado * – samccone

Respuesta

4

Si conoce la clave del objeto anidado que usted está tratando de recuperar, puede utilizar una función.

Ver: http://jsfiddle.net/jimschubert/zPWDJ/

JS:

$(function() { 
    var names = { 
     "a": [ 
      {"foo": { "name": "foo name"}}, 
      {"bar": { "name": "bar name"}}, 
      {"zap": { "name": "zap name"}} 
     ], 
     "n": function() { 
      var self = this; 
      var n = ""; 
      Object.keys(self).forEach(function(k, v) { 
       if (typeof self[k] == "object") { 
        if(!n) n = self[k]["name"]; 
       } 
      }); 
      return n; 
     } 
    }; 

    var template = $('#template').html(); 
    var out = $('#output'); 
    var html = Mustache.to_html(template, names); 
    console.log(html); 
    out.html(html); 
});​ 

html:

<script id="template" class="template" type="text/x-mustache"> 
{{#a}} 
<p>{{n}}</p> 
{{/a}} 
</script> 

<h1>Output</h1> 
<div id="output"> 
</div> 
​ 

supuesto, esto supone que sus datos es un conjunto de objetos (la a en su puesto sería una de las claves de una matriz más grande, tal vez?) Si no tiene una matriz, no veo por qué no sería capaz de ajustar esto para un objeto y hacer una función getter para wha tever las propiedades de cada tecla que estás buscando.

+1

Sí, esto funcionaría ... parece mucho trabajo para obtener valores de un hash en lugar de simplemente iterar sobre ellos en la vista – samccone