2015-02-24 52 views
1
迭代

我的HTML類似於此如何通過兩個陣列中的對象使用模板傭工Meteor.js

<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]} 

我想通過每個時間的數組中的每個項迭代e模板運行,而是每次輸出每個數組的所有7個值。我知道這是需要的地方,但我不能解決它。有沒有人有任何想法?

回答

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; 
    } 
}); 
+0

你知道如何在這種情況下重新編輯我的幫手中返回的數據結構嗎? – 2015-02-24 12:57:51

+0

我在回答中添加了它 – Guillaume 2015-02-24 13:12:55