Polymer 1.0 重复向子 dom 添加属性

Polymer 1.0 adding attributes to child doms in a repeat

我有这个结构,我想绑定,比如自定义属性或非标准属性,如 forsome-new-attribute 到由 dom-repeat 模板创建的子 dom。我该如何实现?

<dom-module id="card-list">

<template>
    <li>Some Text</li>
    <template is="dom-repeat" items="{{items}}" >
        <li id="{{ item.text }}" for="{{ item.text }}">{{ item.text }}</li>
    </template> 
</template>

<script>
Polymer({
    is: "card-list",
    extends:"ul",
    ready: function() {
      this.items = magically_get_an_array_of_objects();
    },
});
</script>

</dom-module>

如果magically_get_an_array_of_texts函数returns这个对象数组

[
 {text:"foo"},
 {text:"bar"}
]

生成的模板是这样的

<ul is="card-list">
    <li>Some Text</li>
    <li id="foo">foo</li>
    <li id="bar">bar</li>
</ul>

请注意 for 属性如何未绑定。

问题 如何将属性绑定到子 dom,特别是当它们循环时?

您的版本将设置 属性。如您所见,它不会出现在 HTML 中,但会以 属性 的形式提供。 document.querySelector("#foo").for 将打印 foo。 如果要使用自定义属性,则需要扩展 <li> 元素,定义 for 属性并将 reflectToAttribute 设置为 true

<script>
    Polymer({
        is: "card-li",
        extends:"li",
        properties: {
            for: {
                type: String,
                reflectToAttribute: true
            }
        }
    });
</script>

然后像这样使用它。

<li is="card-li" id="{{ item.text }}" for="{{ item.text }}">{{ item.text }}</li>

您可以简单地使用 binding to native element attribute

for$="{{ item.text }}"