2013-02-23 8 views
21

Voglio utilizzare il manubrio #each con un oggetto che non è un array.Meteor e manubri #each per iterare sull'oggetto

Come faccio? Ho bisogno che funzioni ancora con le funzioni speciali di Meteora con #each.

Il mio scopo è sotto forma di:

{ 
    john: "hello", 
    bob: "hi there" 
} 

Sto cercando di ottenere un output simile a questo:

<div>hello</div> 
<div>hi there</div> 
+0

Potresti postare quello che stai usando come oggetto? Potrebbe non essere possibile se si desidera ottenere le proprietà di un oggetto ripetuto, ma si può sempre usare '{{item.property}}' – Akshat

+0

@Ashat che ho postato il mio oggetto. Grazie per l'aiuto. – Harry

+3

** Ora c'è un supporto integrato per questo **; vedi http://stackoverflow.com/q/11884960/50079 – Jon

risposta

37

È necessario utilizzare un assistente nella vostra js per aiutare a comprendere manubri l'oggetto:

Aggiungi al vostro cliente js

Template.registerHelper('arrayify',function(obj){ 
    var result = []; 
    for (var key in obj) result.push({name:key,value:obj[key]}); 
    return result; 
}); 

E l'uso (è anche possibile utilizzare il tasto con {{name}}) nel tuo html:

{{#each arrayify myobject}} 
    <div title="hover here {{name}}">{{value}}</div> 
{{/each}} 

myobject deriva dal modello:

Template.templatename.helpers({ 
    myobject : function() { 
     return { john:"hello", bob: "hi there" } 
    } 
}); 
+0

Qualche vantaggio nel farlo con l'aiuto di un manubrio rispetto a farlo con i modelli di meteore? – Harry

+1

L'helper deve essere dichiarato una sola volta per funzionare su tutti i modelli, l'helper del template funziona solo per un modello in modo da doverlo ripetere ogni volta. L'ho usato nel caso in cui decidessi di usare l'oggetto in più modelli – Akshat

+0

L'API è cambiata, usa 'Template.registerHelper()' invece di 'Handlebars.registerHelper()' http://docs.meteor.com/#/full/template_registerhelper –

8

È possibile convertire il vostro oggetto in array con sottolineatura _.map

html:

<template name="test"> 
    {{#each person}} 
     <div>{{greeting}}</div> 
    {{/each}} 
</template> 

JS:

Template.test.helpers({ 
    person : function() { 
     return _.map(object, function(val,key){return {name: key, greeting: val}}); 
    } 
}); 
4

Si segnala per le persone trovare questo ora che il modo corretto di dichiarare Manubri soccorritori in Meteor stesura di questo documento è con il metodo UI.registerHelper al contrario di Handlebars.registerHelper. Quindi l'helper sopra dovrebbe apparire così:

UI.registerHelper("arrayify", function(obj){ 
    result = []; 
    for (var key in obj){ 
     result.push({name:key,value:obj[key]}); 
    } 
    return result; 
}); 
+4

Al giorno d'oggi è 'Template.registerHelper()' http://docs.meteor.com/#/full/template_registerhelper –