Хобрук: Ваш путь к мастерству в программировании

Как перебрать неизвестный объект в шаблоне Meteor Spacebars?

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

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


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

Итак, как мне динамически установить количество и имена столбцов в моем шаблоне пробелов/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>

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

Есть идеи?

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

введите здесь описание изображения

... и "строки" выглядят так:

введите здесь описание изображения

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

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


  • Вы правы, говоря, что должны знать структуру данных, чтобы использовать каждый с контекстом данных. Вы можете, конечно, заранее проанализировать структурированный массив или использовать помощника внутри каждого цикла ({{#each doEach(WHAT)}}), и помощник вернет ваш структурированный массив. 08.04.2015
  • Имеют ли данные коллекции различные поля, но плоскую структуру? Можете ли вы показать нам пример документа? 08.04.2015
  • Я добавил примеры данных для иллюстрации. 08.04.2015
  • Должен ли он быть реактивным? 08.04.2015
  • Он должен быть реактивным, да. Данные будут обработаны позже, и я хотел бы, чтобы таблица отражала это. Однако для начала я был бы доволен нереактивным решением. ;) 08.04.2015
  • вы должны иметь возможность сделать это с помощью итеративного вспомогательного блока, см., например, stackoverflow.com/questions/22750022/ 08.04.2015

Ответы:


1

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

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

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

{{#each row}}
  {{#each items}}
09.04.2015
  • Похоже на относительно простой компромисс. Я должен иметь возможность создавать массивы из своих столбцов и вместо этого вставлять их в свои документы. 09.04.2015

  • 2

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

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

    Затем вы можете вложить вспомогательные функции each и получить доступ к примитивам с помощью this. Супер чистый и легкий.

    08.04.2015
  • Я вижу, что не смогу каким-то образом обойти использование массивов. Спасибо за предложение! 09.04.2015
  • Новые материалы

    Блоги, которые обязательно нужно прочитать специалистам по обработке и анализу данных :
    Добро пожаловать в 2020! Новый год и новое десятилетие. Поскольку мы начинаем новый и захватывающий год в науке о данных, важно, чтобы профессионалы открыли для себя лучшие блоги по науке о..

    Универсальный базовый доход
    Универсальный базовый доход В последние годы концепция всеобщего базового дохода (УБД) набирает обороты как все более эффективное решение для борьбы с растущим неравенством доходов и..

    Освоение Python для анализа финансовых данных: руководство по получению данных о доходах от акций
    Если вы хотите научиться получать данные о доходах от акций с помощью Python, то это руководство для вас! В этой статье мы рассмотрим несколько примеров сбора данных о доходах от акций. Мы..

    Абсолютно имеет смысл.
    Абсолютно имеет смысл. Мой репетитор даже предложил то же самое. Одна проблема, с которой я столкнулся, заключается в том, что для каждой из категорий не было ярлыка «хорошо». Если я перебираю..

    МАШИННОЕ ОБУЧЕНИЕ И EDA
    Каковы шаги в машинном обучении Определение проблемы Генерация гипотез Извлечение данных Исследование данных Прогнозное моделирование Развертывание модели Зачем нам ЭДА? Идентификация..

    В чем основные различия между ReactJS и React-Native?
    В чем основные различия между ReactJS и React-Native? Что я узнал, создавая веб-приложения, а затем мобильные приложения на React React-Native существует уже около 2 лет и стал..

    LeetCode — Умножение строк
    Постановка задачи Даны два неотрицательных целых числа num1 и num2 , представленные в виде строк, вернуть произведение num1 и num2 , а также представлен в виде строки. Примечание . Вы..