Polymer 从<;内容>;

Polymer 从<;内容>;,polymer,Polymer,我有一个表单el,它只是一个容器,必须用特定的类将所有孩子包装在div中。我不想在每个表单元素中重复这个div,而是允许el中的来包装它们。 我可以循环所有元素并将它们包装到其他html标记中吗 // Markup <form-el> <input-el label="name" type="text" /> <span>This must also be wrapped</span> </form-el> // Wo

我有一个
表单el
,它只是一个容器,必须用特定的类将所有孩子包装在
div
中。我不想在每个表单元素中重复这个
div
,而是允许el中的
来包装它们。
我可以循环所有元素并将它们包装到其他html标记中吗

// Markup
<form-el>
    <input-el label="name" type="text" />
    <span>This must also be wrapped</span>
</form-el>

// Would produce
<form>
    <div class="form-field">
       <label>name</label>
       <input type="text" name="name" />
    </div>
    <div class="form-field">
       <span>This must also be wrapped</span>
    </div>
</form>
// Where '<div class="form-field">' is produced by 'from-el'
//标记
这也必须包装好
//会产生
名称
这也必须包装好
//其中“”由“from el”生成

实现这一点的一种方法是通过模板重复为light dom定制的节点,如下所示:

<polymer-element name="form-el">
<template>

  <template repeat="{{wrappers}}">
    <div style="border: 2px solid orange; padding: 2px; margin: 4px">
      <content select="[key='{{}}']">
    </div>
  </template>

</template>
<script>

  Polymer({
    domReady: function() {
      this.updateWrappers();
    },
    updateWrappers: function() {
      this.wrappers = [];
      for (var i=0, n=this.firstChild; n; n=n.nextSibling) {
        if (n.setAttribute) {
          // attach a selectable key to each light-dom node
          n.setAttribute('key', i);
          // specify a <content> with that key
          this.wrappers.push(i++);
        }
      }
    }
  });

</script>
</polymer-element>

聚合物({
domReady:function(){
this.updateWrappers();
},
updateWrappers:function(){
this.wrappers=[];
for(变量i=0,n=this.firstChild;n;n=n.nextSibling){
if(n.setAttribute){
//将可选键附加到每个灯光dom节点
n、 setAttribute('key',i);
//使用该键指定一个
this.wrappers.push(i++);
}
}
}
});

非常感谢。但当我尝试包裹聚合物元素时,它只显示第一个。任何自定义元素都不能为空,请注意,您不能使用
您必须使用
@ScottMiles如何/何时才能获得包装器?由于模板是以异步方式标记和分发的,因此我无法在
this.updateWrappers()之后立即获取对
this.shadowRoot.querySelectorAll(“div”)
的引用设置超时是否足够简单?在简化的情况下,它是有效的,但它是否足以避免任何竞争条件?