Изменение содержимого шаблона во время выполнения

Я хочу создать элемент Polymer, который генерирует вывод списка

<polymer-element name="polymer-list>
  <template>
    <template id="my-repeat" repeat="{{item in listData}}">
      <!-- use content here -->

      <!-- some fix dummy content to see how this is handled -->
      <div id="div_{{item['item']['index']}}">{{item['item']['index']}}</div> 

    </template>
    <content id="content" select="*"></content>
  </template>
  <script type="application/dart" src="polymer_list.dart"></script>
</polymer-element>

и я хочу переместить элементы, предоставленные <content select="*"></content>, внутри тега <template id="my-repeat"> (в позиции <!-- use content here -->), когда инициируется polymer-list (готово, прикреплено, ...).

Мой polymer-list должен использоваться как

<polymer-list id="list" data="{{data}}" on-polymer-select="{{selectAction}}">
  <div class="header">{{item['index']}}</div>
  <div class="item {{item['selected']}}">Index: {{item['index']}}</div>
</polymer-list>

В результате оба <div> должны повторяться для каждого item в data элементом <polymer-list>.

Я старался

var listContent = ($['content'] as ContentElement).getDistributedNodes();
var t = ($['my-repeat'] as TemplateElement);
listContent.forEach((n) => t.append(n.clone(true));
// listContent.forEach((n) => t.content.append(n.clone(true)); // didn't work either

в результате я получаю

<!-- ... -->
<template id="my-repeat" repeat="{{item in listData}}">
  #document-fragment
    <div class="header"></div>
    <div class="item">Index: </div>
</template>
<div id="div_0">0</div>
<div id="div_1">1</div>
<div id="div_0">2</div>
<!-- ... -->

Фиктивное содержимое исправления повторяется в обычном режиме, но динамически добавляемые элементы помещаются в document-fragment, но не повторяются.

Любой намек на манипулирование HTML в <!-- use content here --> во время выполнения был бы замечательным.


person Günter Zöchbauer    schedule 19.12.2013    source источник


Ответы (1)


К сожалению, вы можете вставить свой контент только один раз, как указано в спецификации (http://www.w3.org/TR/2013/WD-components-intro-20130606/#insertion-points):

Точки вставки позволяют изменить порядок или выборочно пропустить рендеринг дочерних элементов хоста, но они не приведут к многократному рендерингу чего-либо. Порядок дерева определяет, когда каждый из этих элементов принимает участие в выборе дочерних элементов. Как только дочерний элемент выбран для рендеринга в одной точке вставки, он не может быть запрошен другой, поэтому декоратор details-open отображает сводку только один раз.

person akserg    schedule 22.12.2013