2012-04-02 15 views
5

dato questo hashCome iterare su un hash in mustache.js

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

voglio scorrere su di esso, ma dal momento che le chiavi sono differenti io non sono sicuro di come in Mustache.js

l'uscita sarà simile a questa foo: (contenuto qui)

+0

Potete dettagliare questo un po '? Vuoi ripetere gli elementi di 'foo',' bar' e 'zap' o le chiavi stesse? – ZeissS

+0

@ZeissS modificato * – samccone

risposta

4

Se si conosce la chiave nell'oggetto nidificato che si sta cercando di recuperare, è possibile utilizzare una funzione.

vedi: 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> 
​ 

Questo ovviamente presuppone che il dato è un array di oggetti (il a nel tuo post sarebbe una chiave di un array più grande, forse?) Se non si dispone di un array, non vedo perché non si possa regolare questo per un oggetto e creare una funzione getter per wha proprietà di ogni tasto che stai cercando.

+1

sì, funzionerebbe .. sembra solo un sacco di lavoro per ottenere i valori di un hash invece di iterare semplicemente su di essi nella vista – samccone