21

我想将把手#each与不是数组的对象一起使用。

我怎么做?我需要它仍然可以使用流星的特殊功能#each

我的对象是以下形式:

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

我试图得到这样的输出:

<div>hello</div>
<div>hi there</div>
4

3 回答 3

37

您需要在 js 中使用帮助器来帮助车把理解您的对象:

添加到您的客户端js

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

{{name}}并在您的 html 中使用(您也可以使用带有 的键):

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

myobject来自您的模板:

Template.templatename.helpers({
    myobject : function() { 
      return { john:"hello", bob: "hi there" } 
    }
});
于 2013-02-23T01:02:49.260 回答
8

您可以使用下划线 _.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}});
    }
});
于 2014-03-10T05:13:35.620 回答
4

现在发现这一点的人应该注意,在撰写本文时,在 Meteor 中声明 Handlebars 助手的正确方法是使用 UI.registerHelper 方法,而不是使用 Handlebars.registerHelper。所以上面的助手现在应该是这样的:

UI.registerHelper("arrayify", function(obj){
    result = [];
    for (var key in obj){
        result.push({name:key,value:obj[key]});
    }
    return result;
});
于 2015-02-24T01:38:46.797 回答