2013-02-23 13 views
21

Chcę użyć kierownicy #each z obiektem, który nie jest tablicą.Meteor i kierownice #każ do iterowania nad obiektem

Jak to zrobić? Potrzebuję go do pracy ze specjalnymi funkcjami meteoru z #each.

Moim celem jest w formie:

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

próbuję dostać wyjście takiego:

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

Czy mógłbyś opublikować to, czego używasz jako obiekt? Może nie być możliwe, jeśli chcesz, aby właściwości obiektu były powtarzane, ale zawsze możesz użyć '{{item.property}}' – Akshat

+0

@Akshat, który wysłałem mój obiekt. Dzięki za pomoc. – Harry

+3

** Istnieje teraz wbudowana obsługa tego **; zobacz http://stackoverflow.com/q/11884960/50079 – Jon

Odpowiedz

37

Musisz użyć pomocnika w swoim js pomóc zrozumieć kierownice Twój przedmiot:

Dodaj do klienta js

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

i wykorzystania (można również użyć klawisza z {{name}}) w HTML:

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

myobject pochodzi z szablonu:

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

Jakieś zalety robienia tego z handlebars helper nad robieniem tego z szablonami meteorytów? – Harry

+1

Pomocnik musi zostać zadeklarowany tylko raz, aby działał we wszystkich szablonach, pomocnik szablonu działa tylko dla jednego szablonu, więc trzeba go za każdym razem redeclare. Użyłem go na wypadek, gdybyś zdecydował się użyć obiektu w większej liczbie szablonów. – Akshat

+0

Interfejs API się zmienił, użyj 'Template.registerHelper()' zamiast 'Handlebars.registerHelper()' http://docs.meteor.com/#/full/template_registerhelper –

8

można przekonwertować obiekt do tablicy z podkreślenia _.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

Należy zauważyć ludziom znalezienie tego teraz, że poprawny sposób zadeklarować Kierownice pomocników w Meteor jak to pisze jest metodą UI.registerHelper w przeciwieństwie do Handlebars.registerHelper. Tak więc powyższy helper powinien wyglądać teraz tak:

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

Obecnie jest to 'Template.registerHelper()' http://docs.meteor.com/#/full/template_registerhelper –