动态节点的自动节点查找(dom-重复)Polymer 1.0

Automatic node finding for dynamic nodes (dom-repeat) Polymer 1.0

在下面的示例中,我希望能够使用属性 'first' 和 select 稍后使用函数“_dummy”设置 id。下面的代码不起作用,我不知道为什么。我按照 doc 中的说明进行操作。有人可以找出问题所在吗?

<dom-module id="my-positions-list">
  <template>

    <div> Employee list: </div>
    <template is="dom-repeat" items="{{employees}}">
        <div id$="{{item.first}}">{{_dummy(item)}}</div> 
        <div>First name: <span>{{item.first}}</span></div>
        <div>Last name: <span>{{item.last}}</span></div>
    </template>

  </template>

  <script>
    Polymer({
      is: 'my-positions-list',
      _dummy: function(item){
        var elem = this.$$("#"+item.first); // returns undifined
        console.log(elem);
      },

      ready: function() {
        this.employees = [
            {first: 'Bob ', last: 'Smith', country: 'united states'},
            {first: 'Sally', last: 'Johnson', country: 'united kingdom'}
        ];
      }
    });
  </script>
</dom-module>

我认为模板是在本地影子中构造的 dom 并且 _dummy 在附加到更高级别 dom 以供 querySelector 或 querySelectorAll 使用之前被调用。

您需要将员工添加到具有默认值的属性。 您正在选择一个刚刚创建的节点。您需要等待本地 dom 准备好使用您的 _dummy 函数。 使用 ready 函数到达你想要的节点。 并考虑适当的 ID(例如,没有大写字母)。 对于此类问题,您应该查阅聚合物生命周期的文档 (https://www.polymer-project.org/1.0/docs/devguide/registering-elements.html)

<dom-module id="my-positions-list">
    <template>

        <div> Employee list: </div>
        <template is="dom-repeat" items="{{employees}}">
            <div id="{{item.first}}"></div>
            <div>First name: <span>{{item.first}}</span></div>
            <div>Last name: <span>{{item.last}}</span></div>
        </template>

    </template>

    <script>
        Polymer({
            is: 'my-positions-list',
            properties: {
                employees: {
                    type: Array,
                    value: function() {
                        return [
                            {first: 'Bob', last: 'Smith', country: 'united states'},
                            {first: 'Sally', last: 'Johnson', country: 'united kingdom'}
                        ];
                    }
                }
            },
            attached: function() {
             this.async(function() {
                   console.log(this.$$("#Bob"));
             });
            }
        });
    </script>
</dom-module>