2015-04-08 2 views
0

Итак, у меня есть коллекция метеоров. Каждый объект/документ в этой коллекции может иметь неизвестную структуру. То есть, я не знаю названия каждого свойства, ни сколько его есть, до времени выполнения.Как пронести по неизвестному объекту в шаблон Meteor Spacebars?

По сути, каждый объект в коллекции создается из произвольных данных, которые люди предоставляют через мою начальную страницу (через загрузку CSV, которая отлично работает). Поэтому я не инициализирую коллекцию при запуске Meteor.


Теперь я хотел бы создать таблицу в моем HTML-страницы, что делает коллекцию, но без меня заранее определяя, как требуется много столбцов и то, что их имена.

Как я могу установить число и имена столбцов в моем шаблоне Spacebars/HTML динамически?

Так вот, насколько я получил на стороне шаблона:

<table> 
    {{#each rows}} 
     {{> row}} 
    {{/each}} 
</table> 

... и шаблон:

<template name="row"> 
    {{#if header}} <!-- header is explicitly set, so this is fine --> 
     <th> 
     {{#each WHAT?}} 
      <td>{{???}}</td> 
     {{/each}} 
     </th> 
    {{else}} 
     <tr> 
     {{#each WHAT?}} 
      <td>{{???}}</td> 
     {{/each}} 
     </tr> 
    {{/if}} 
</template> 

Я пытался найти какой-либо ссылки в Spacebars и Blaze документации, но все примеры всегда требуют, чтобы я знал имена столбцов из get-go.

Любые идеи?

Edit: Вот пример объекта, который я явно идентифицировать в качестве заголовка с помощью свойства заголовка:

enter image description here

... и "строки" выглядит следующим образом:

enter image description here

Таким образом, я соврал, по-видимому, тем, что мои имена свойств/столбцов всегда являются номерами индексов.

Чтобы ответить на другой вопрос: После определения набора данных (совокупность) все объекты имеют одинаковое количество свойств (например, представляют таблицу csv, откуда всегда будут поступать мои данные).

+1

Вы правы, говоря, вы должны знать структуру данных, чтобы использовать каждый из контекста данных. Вы можете, конечно, заранее разобрать в структурированный массив или использовать помощника внутри каждого цикла ('{{#each doEach (WHAT)}}'), и помощник вернет ваш структурированный массив. – below9k

+0

Имеются ли данные сбора в разных полях, но плоская структура? Можете ли вы показать нам пример документа? –

+0

Я добавил примеры данных для иллюстрации. – batjko

ответ

1

Из моделирования данных mongo db pov этот дизайн можно легко улучшить, вставив переменные поля в массивы. то есть

{ items: 
    [ 
    "wexfr", 
    "123x", 
    "ewfxc", 
    "rgc" 
    ], 
    _id: "NYz84Qhu901MPab", 
    header: false, 
    createdAt: "2015-04-08T19:46:24" 
} 

Тогда вы можете иметь шаблоны, такие как:

{{#each row}} 
    {{#each items}} 
+0

Похоже на относительно простой компромисс. Я должен иметь возможность создавать массивы из своих столбцов и вставлять их в свои документы. – batjko

+0

Это сработало красиво! Большое спасибо! – batjko

+0

Рад, что все получилось! –

1

Поскольку ваши свойства не имеют значения, кроме индекса, это не очень хороший вариант использования для объектов. Если вам нужно придерживаться схемы (или делать глубоко вложенные обновления, хотя я не уверен, как вы могли бы ...), следуйте предложению Кристиана. В противном случае я бы получил интерфейс, чтобы предоставить вам массивы или преобразовать объекты в массивы в пост-процесс.

data = [['uno', 'dos', 'tres'], ['wexfd', 'foobar', 'etc.']]

Тогда вы могли бы гнездиться в each хелперов и доступ к примитивы с this. Super clean & простой.

+0

Я могу см., что я не буду использовать массивы каким-то образом. Спасибо за предложение! – batjko