2014-11-26 3 views
3

Это часть 2 моей last question. Благодаря некоторым полезным людям, теперь у меня есть документ, который выглядит следующим образом:Итерация через массив с пробелами

{ "_id" : "dndsZhRgbPK24n5LD", "createdAt" : ISODate("2014-11-26T16:28:02.655Z"), "data" : { "cat1" : 493.6, "cat2" : 740.4 }, "owner" : "GiWCb8jXbPfzyc5ZF", "text" : "asdf" } 

В частности, я хочу, чтобы извлечь значение из каждого свойства data в Spacebars и перебрать его, чтобы создать таблицу - и я знаю, количество полей в объекте data, но количество может меняться. Да, я знаю, что это было asked before, но никто, похоже, не смог дать удовлетворительный ответ, который работает. Но как конечный результат я хочу показать весь документ в ряд, как этот

<tbody> 
    <tr> 
    <td>493.6</td> 
    <td>740.4</td> 
    <td>asdf</td> 
</tbody> 

Заранее спасибо за любую помощь.

ответ

5

Вот полный рабочий пример:

Cats = new Mongo.Collection(null); 

Meteor.startup(function() { 
    Cats.insert({ 
    data: { 
     cat1: 100, 
     cat2: 200 
    }, 
    text: 'cat1' 
    }); 

    Cats.insert({ 
    data: { 
     cat1: 300, 
     cat2: 400, 
     cat3: 500 
    }, 
    text: 'cat2' 
    }); 
}); 

Template.cats.helpers({ 
    cats: function() { 
    return Cats.find(); 
    }, 

    // Returns an array containg numbers from a cat's data values AND the cat's 
    // text. For example if the current cat (this) was: 
    // {text: 'meow', data: {cat1: 100, cat2: 300}}, columns should return: 
    // [100, 200, 'meow']. 
    columns: function() { 
    // The current context (this) is a cat document. First we'll extract an 
    // array of numbers from this.data using underscore's values function: 
    var result = _.values(this.data); 

    // result should now look like [100, 200] (using the example above). Next we 
    // will append this.text to the end of the result: 
    result.push(this.text); 

    // Return the result - it shold now look like: [100, 200, 'meow']. 
    return result; 
    } 
}); 
<body> 
    {{> cats}} 
</body> 

<template name='cats'> 
    <table> 
    {{#each cats}} 
     <tr> 
     {{#each columns}} 
      <td>{{this}}</td> 
     {{/each}} 
     </tr> 
    {{/each}} 
    </table> 
</template> 
+0

Пожалуйста, смотрите мой обновленный вопрос. Проблема в том, что я не только хочу отображать объект 'data', но и остальную часть документа. –

+0

Я обновил ответ с помощью протестированного решения. Это то, что вы ищете? Неясно, возникает ли у каждого документа одинаковая структура или количество полей меняется. –

+0

Количество полей в 'data' может варьироваться. Это в сочетании с отображением остальной части документа делает узел. –