Значение подачи полимера во второй дом-повтор

Я пытаюсь использовать dom-repeat внутри dom-repeat над массивом json внутри массива json. Как передать значение из первого массива второму dom-repeat?

Для иллюстрации у меня есть следующий массив json, который прекрасно загружается:

  "books": [
    {
      "title": "book1",
      "slug": "b1",
      "authors": ["author1","author2"],
      "blurb": "Some text"
    },
    {
      "title": "book2",
      "slug": "b2",
      "authors": ["author2","author3"],
      "blurb": "some more text"
    }]

Я перебираю массив 'books' и получаю заголовок и объявление. Затем внизу я хочу, чтобы в списке были указаны оба автора каждой книги, а также ссылка на каждого из них в формате / slug / author (fi /b1/author1). Но поскольку во втором дом-повторе я переопределяю "элементы", "слаг" больше не доступен. Как мне это сделать?

<template>
    <iron-ajax
      auto
      url="somelist.json"
      handle-as="json"
      last-response="{{someList}}"></iron-ajax>

    <template is="dom-repeat" items="{{someList.books}}">
         <paper-collapse-group>
           <paper-collapse-item header$="{{item.title}}">
               <p>{{item.blurb}}</p>
           </paper-collapse-item>
           <template is="dom-repeat" items="{{item.authors}}">
                  <a href$="/[[slug]]/[[item]]">{{item}}</a></div>
           </template>
         </paper-collapse-group>
    </template>
</template>

Я также очень новичок в Polymer, так что спасибо за помощь в обучении!

2 ответа

Решение

Использовать as атрибут, чтобы использовать пользовательское имя для item имущество.

Пример:

<template>
    <iron-ajax
      auto
      url="somelist.json"
      handle-as="json"
      last-response="{{someList}}"></iron-ajax>

    <template is="dom-repeat" items="{{someList.books}}" as="book">
        <paper-collapse-group>
          <paper-collapse-item header$="{{book.title}}">
              <p>{{book.blurb}}</p>
          </paper-collapse-item>
          <template is="dom-repeat" items="{{book.authors}}" as="author">
                  <a href$="/[[book.slug]]/[[author]]">{{author}}</a></div>
          </template>
        </paper-collapse-group>
    </template>
</template>

Итак, что вы можете сделать, это создать еще один элемент, скажем, что будет выглядеть так:

<dom-module id="authors">
  <template>
    <template is="dom-repeat" items="[[authors]]">
      <a href$="/[[slug]]/[[item]]">[[item]]</a>
    </template>
  </template>

  <script>
    Polymer({
      is: 'authors',

      properties: {
        authors: Array,
        slug: String
      },
    });
  </script>
</dom-module>

а затем вставьте его в свой код, например:

<template is="dom-repeat" items="[[someList.books]]">
  <paper-collapse-group>
    <paper-collapse-item header$="[[item.title]]">
      <p>[[item.blurb]]</p>
    </paper-collapse-item>
    <authors slug="[[item.slug]]" authors="[[item.authors]]"></authors>       
  </paper-collapse-group>
</template>
Другие вопросы по тегам