2013-02-23 14 views
21

Ich möchte den Lenker #each mit einem Objekt verwenden, das kein Array ist.Meteor und Lenker #ach jedem Objekt iterieren

Wie mache ich das? Ich brauche es noch mit den speziellen Eigenschaften des Meteors mit #each zu arbeiten.

Mein Ziel ist es in Form von:

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

Ich versuche, eine Ausgabe wie folgt zu erhalten:

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

Könnten Sie das, was Sie als Objekt verwenden, posten? Es ist möglicherweise nicht möglich, wenn Sie die Eigenschaften eines Objekts iterieren möchten, aber Sie können immer '{{item.property}}' – Akshat

+0

@Akshat verwenden, auf dem ich mein Objekt gepostet habe. Danke für Ihre Hilfe. – Harry

+3

** Es gibt jetzt eingebaute Unterstützung für dieses **; siehe http://StackOverflow.com/Q/11884960/50079 – Jon

Antwort

37

Sie benötigen einen Helfer in Ihrem js verwenden Lenker zu helfen, zu verstehen Ihre Aufgabe:

in Ihre Client js

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

Und die Verwendung in Ihrem HTML (Sie können auch den Schlüssel mit {{name}} verwenden):

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

myobject kommt aus Ihrer Vorlage:

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

Irgendwelche Vorteile, es mit einem Lenkstangenhelfer zu machen, der es mit Meteorschablonen macht? – Harry

+1

Der Helfer muss nur einmal für alle Vorlagen deklariert werden, der Vorlagenhelfer funktioniert nur für eine Vorlage, so dass Sie ihn jedes Mal neu deklarieren müssen. Ich benutze es für den Fall, dass Sie das Objekt in mehr Vorlagen verwenden möchten – Akshat

+0

Die API wurde geändert, verwenden Sie 'Template.registerHelper()' anstelle von 'Handlebars.registerHelper()' http://docs.meteor.com/#/full/template_registerhelper –

8

Sie Ihr Objekt in einem Array mit Unterstreichungs _.map umwandeln kann

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

Es sollte für die Menschen zu finden, dies nun zu beachten, dass die richtige Art und Weise Lenker Helfer in Meteor zum Zeitpunkt des Schreibens zu erklären, mit der UI.registerHelper Methode ist wie zu Handlebars.registerHelper gegenüber. So sollte der obige Helfer nun so aussehen:

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

Heutzutage ist es 'Template.registerHelper()' http://docs.meteor.com/#/full/template_registerhelper –