Как я могу получить доступ к элементу в родительском шаблоне повтора, находясь в фильтре

<iron-pages>
    <template is="dom-repeat" items="{{fruit_categories}}" as="category">
        <div>
            <template is="dom-repeat" items="{{all_fruits}}" as="fruit"
                      filter="isThisFruitInTheRightCategory">
                <!-- Some more stuff -->
                <span>{{fruit.weight}}</span>
                <span>{{fruit.age}}</span>
                <!-- ... -->
            </template>
        </div>
    </template>
</iron-pages>

isThisFruitInTheRightCategory: function(fruit){
    return fruit.category === /* Q: How do I get the current category? */
}

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

Я пытался использовать фильтр, чтобы отфильтровать фрукты, которые не принадлежат к текущей категории, однако я не могу найти способ доступа к родителю ({{category}}).

Какой способ это сделать?

1 ответ

Решение

Одним из решений является связывание filter Свойство для генератора фильтров, вот так:

filter="{{filterForCategory(category)}}"

а потом

        filterForCategory: function(category) {
          return function(fruit) {
            return fruit.category === category;
          }
        }

Полный пример здесь:

<dom-module id="x-example">
  <template>

    <template is="dom-repeat" items="{{fruit_categories}}" as="category">
      <h2>{{category}}</h2>
      <div>

         <template is="dom-repeat" items="{{all_fruits}}" as="fruit" filter="{{filterForCategory(category)}}">
          <span>{{fruit.name}}</span><br>
        </template>

      </div>
    </template>

  </template>
  <script>

      Polymer({
        is: "x-example",
        properties: {
          fruit_categories: {
            value: ['apples', 'oranges']
          },
          all_fruits: {
            value: [
              {name: 'fuji', category: 'apples'},
              {name: 'granny smith', category: 'apples'},
              {name: 'navel', category: 'oranges'}
            ]
          }
        },
        filterForCategory: function(category) {
          return function(fruit) {
            return fruit.category === category;
          }
        }
      });

    });
  </script>
</dom-module>
Другие вопросы по тегам