ti-enxame.com

Meteoro e guidão #each para iterar sobre o objeto

Eu quero usar o guidão #each com um objeto que não é uma matriz.

Como faço isso? Eu ainda preciso que ele funcione com os recursos especiais do meteoro com #each.

Meu objeto está na forma de:

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

Estou tentando obter uma saída como esta:

<div>hello</div>
<div>hi there</div>
21
Harry

Você precisa usar um auxiliar em seus js para ajudar o guidão a entender seu objeto:

Adicione ao seu cliente js

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

E use (você também pode usar a tecla com {{name}}) no seu html:

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

myobject vem do seu modelo:

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

Você pode converter seu objeto em matriz com sublinhado _.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}});
    }
});
8
solo999

Deve-se observar que as pessoas descobrindo isso agora que a maneira correta de declarar auxiliares do guidão no Meteor até o momento da redação deste artigo é com o método UI.registerHelper, em oposição ao Handlebars.registerHelper. Portanto, o ajudante acima deve ficar assim agora:

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