Как мне найти второй набор данных JSON, используя переменную в основном JSON — с помощью рулей?

#javascript #json #handlebars.js

#javascript #json #handlebars.js

Вопрос:

У меня есть два набора данных — один определяет включенные элементы для страницы, другой — больший набор данных с более глубокими данными. Но для этого допустим, у нас есть это — первый набор данных JSON (назовем его page.json)

 {
 "title": "pageTitle here",
 "description": "Content here",
 "items": [
  {
   "id": 14,
   "name": "Bob"
  },
  {
   "id": 11,
   "name": "Dave"
  },
  {
   "id": 12,
   "name": "Fred"
  },
 ]
}
  

Второй набор данных JSON (назовем его data.json) содержит

 [
 {
  "id": 14
  "name": "Bob Matthews",
  "description": "Some description here about Bob",
  "age": 24,
  "location": "Sydney"
 },
 {
  "id": 11
  "name": "Dave Smith",
  "description": "Some description here about Dave",
  "age": 23,
  "location": "Sydney"
 },
 {
  "id": 12
  "name": "Fred Williams",
  "description": "Some description here about Fred",
  "age": 42,
  "location": "Sydney"
 }
]
  

Теперь в моих шаблонах у меня есть что-то вроде

 <!-- loop through each person for this page from page.json -->
{{#each page}}
  <!-- lets find the data for this person from the data.json and display it -->
  {{#compare page.id data.id}}
   <h2>{{data.name}}</h2>
   <p>Description {{data.description}}</p>
   <p>Age {{data.age}}</p>
   <p>Location {{data.location}}
  {{/compare}}
{{/each}}
  

Но это не работает … есть ли какой-нибудь способ без создания пользовательского помощника handlebar для поиска (и последующего отображения данных) элемента из массива во 2-м источнике данных JSON?

Примечание: это для проекта с использованием Assembly .io amp; Grunt для создания статических страниц из наборов данных JSON

Спасибо

Комментарии:

1. я знаю, что это не тот ответ, который вы ищете, но вы можете объединить данные перед вызовом шаблона

2. Да, это не тот ответ, который мне нужен, но хорошая идея — рассмотрю это, спасибо

3. Глупый вопрос — мне нужно было бы сделать это в grunt.js файл правильный? хм

4. Зависит от того, чего вы пытаетесь достичь. Я предположил, что это все javascript. Я использую Lodash, но есть и другие методы для объединения подобных данных. jsbin.com/heqis/3/edit

5. Да, это JS, для создания статических страниц из различных источников данных json с помощью Assembly. ввод-вывод и выполнение

Ответ №1:

Я не тестировал это, но вы пробовали перебирать список, data.json чтобы найти элемент, соответствующий текущему элементу page.json . Возможно, потребуется некоторая доработка кода, поскольку я действительно имел дело только с YAML Front Matter, и я не знаком с тем, как использовать файлы * .json .

 {{#each page.items}} <!-- loop through each person for this page from page.json -->
    {{#each data}}   <!-- loop through each person in list from data.json -->
        <!-- In here '../page' refers to the page in previous scope -->
        <!-- and 'this' refers to the current element in data.      --> 

        <!-- lets find the data for this person from the data.json and display it -->
        {{#compare ../page.id this.id}}
            <h2>{{this.name}}</h2>
            <p>Description {{this.description}}</p>
            <p>Age {{this.age}}</p>
            <p>Location {{this.location}}    
       {{/compare}}

    {{/each}} <!-- end data loop -->
{{/each}}     <!-- end page.items loop -->