如何使用Meteor.js中的模板助手迭代对象中的两个数组

时间:2015-02-24 12:31:40

标签: javascript json meteor handlebars.js this

我的HTML类似于

<template name="stop">  
   {{#each thumb}}

  <tr>
    <td class="image" ><img src="{{this.data}}"></td>
    <td>
     <center style="float:right; margin-bottom: 25%;">    
       <h2> Do you like this product? </h2>

       <h2>{{this.text}}</h2></center>
    </td>
  </tr>
  {{/each}}

</template>

这个模板引用了我的模板助手,它看起来像这样

Template.stop.helpers( {
        'thumb': function(data) {
            console.log(z);
            return tweetImages.findOne()
        })

tweetImage.findOne()输出此

Object {_id: "1", data: Array[7], text: Array[7]}

我每次模板运行时都试图迭代两个数组中的每个项目,而是每次输出每个数组的所有7个值。我知道在某个地方需要的上下文变量,但我无法解决它。有人会有任何想法吗?

1 个答案:

答案 0 :(得分:2)

findOne只返回一个元素,因此each只会迭代一次。 您需要嵌套each来浏览datatext属性,如下所示:

{{#each thumb}}
  ...
  {{#each data}}
    //but you won't be able to get 'text' here
  {{/each}}
  ...
{{/each}}

但正如您所看到的,您将无法使用此方法访问数据和文本数组。也许您可以修改助手返回的数据,使其具有以下形式:

[
  {data: ..., text: ...},
  {data: ..., text: ...},
  {data: ..., text: ...},
  ...
]

所以你可以这样做:

{{#each thumb}}
  ...
  {{data}}
  {{text}}
  ...
{{/each}}

要重写数据,您可以使用for循环:

Template.stop.helpers({
  'thumb': function() {            
    var result = tweetImages.findOne();
    var newResult = [];
    for(var i = 0; i < result.data.length; i++) {
      newResult[i] = {data:result.data[i], text:result.text[i]};
    }
    return newResult;
  }
});