Handlebars обращаются к значениям вложенного массива по заданному c значению индекса - PullRequest
0 голосов
/ 07 января 2020

Я знаю, что раньше меня спрашивали, как получить доступ. Что я хочу знать, так это как получить его по определенной схеме, поскольку я новичок в руле.

, поэтому у меня есть один json данные следующим образом.

    "value": [
      {
        "tos": [
              {
                  "emailAddress": {
                      "name": "random random1",
                      "address": "random.r@random.com"
                  }
              },
              {
                  "emailAddress": {
                      "name": "abcd xyz",
                      "address": "abcd.x@radom.com"
                  }
              }
          ]
      },
      {
        "tos": [
              {
                  "emailAddress": {
                      "name": "random2 random2",
                      "address": "random2.r@random2.com"
                  }
              },
              {
                  "emailAddress": {
                      "name": "qwer zxc",
                      "address": "qwer.z@radom2.com"
                  }
              }
          ]
      }

   ]

Я хочу получить это имя и адрес следующим образом. name(emailAddress)

<table>
    <tr>
     <th>Tos</th>
    <tr>
    <tr>
      <td>random random1(random.r@random.com)<br>
          abcd xyz(abcd.x@radom.com)
      </td>
   </tr>
   <tr>
      <td>random2 random2(random2.r@random2.com)<br>
          qwer zxc(qwer.z@radom2.com)
      </td>
    </tr>
</table>

То, что я до сих пор пробовал, это ...

<tr>
{{#each messages}}
 {{#each this.tos}}
  {{#each this.emailAddress}}
    <td>{{this.name}}({{this.address}})</td>
  {{/each}}
 {{/each}}
{{/each}}
</tr>

, но мне не повезло, и я тоже пытался ... {{this.[1]}} или {{emailAddress.name}} или {{name}}

Так кто-нибудь может мне помочь, как я могу этого достичь?

1 Ответ

0 голосов
/ 12 января 2020

Во-первых, я бы удалил строку {{#each this.emailAddress}} из шаблона. Это перебирает каждое свойство каждого emailAddress объекта - ie., .name и .address.

{{#each this.tos}}
    <td>
        {{this.emailAddress.name}}(this.emailAddress.address)}}
    <td>
{{/each}}

. Выше будут выведены нужные нам данные, но каждый emailAddress будет помещен в свой <td>. Тем не менее, ваш ожидаемый результат имеет все emailAddress es в каждом tos массиве, чтобы быть в пределах одного <td>, разделенного <br>. Мы можем использовать переменную данных @ last Handlebars для условной визуализации <br> для каждого, кроме последнего элемента в массиве tos:

{{#each messages}}
    <tr>
        <td>
            {{#each this.tos}}
                {{this.emailAddress.name}}({{this.emailAddress.address}})
                {{#if @last}}{{else}}<br>{{/if}}
            {{/each}}
        </td>
    </tr>
{{/each}}

Обратите внимание, что <td> должен содержать {{each this.tos}} для того, чтобы Объекты в tos отображались в одном <td>. Кроме того, поскольку нам нужно <tr> для каждого объекта в messages, мы должны переместить <tr> в пределах строки {{#each messages}}.

Я создал JS Fiddle для справки.

...