【问题标题】:Polymer 1.0 itemForElement in nested dom-repeat嵌套 dom-repeat 中的 Polymer 1.0 itemForElement
【发布时间】:2015-10-01 23:05:19
【问题描述】:

例如,我有一个这样的 dom-repeat:

<template is="dom-repeat" id="rows" items="[[rows]]" as="row">
  <tr class="result-tb-row" closed$=[[row.closed]]>
    <td class="result-tb-data">
      <ul class="violation-list">
        <template id="rowItem" is="dom-repeat" items="[[row.items]]">
          <li on-click="click">[[item]]</li>
        </template>
      <ul>
    </td>
  </tr>
</template>

如果我想知道我点击的是哪一行,我可以这样写:

this.$.rows.itemForElement(event.target);

但是,如果我想获得与我点击的li 对应的确切项目怎么办。我该怎么做?我显然不能做到this.$.rowItem.itemForElement(event.target),因为rowItem 不是唯一的。

更新

event.model.item 似乎解决了这个特殊问题。但是,如果您有双重嵌套的 dom-repeat 或更多,并且想要获得中间层,那么您就不走运了。可能必须自己实现一个迭代器。双嵌套 dom-repeat 在表中发生了很多。表已经是一个嵌套的 dom-repeat;如果您想在表格单元格中使用 dom-repeat(并且您会遇到它),则会发生双嵌套 dom-repeat。

实现迭代器并不难,只是希望 Polymer 团队支持更多嵌套 dom-repeat 的方法,因为这是一个很棒的功能。

【问题讨论】:

  • 你试过event.model吗?
  • 使用click fn返回的sender参数访问li

标签: polymer-1.0


【解决方案1】:

event.target 持有 &lt;li&gt; 引用。

当您执行this.$.rowItem.itemForElement(event.target) 时,名为rowItemdom-repeat 是唯一的,它将查看属于该&lt;li&gt; 的项目。

但是如果你只想要项目数据,你可以使用event.model.item,它包含对属于你点击的行的项目数据的引用。

【讨论】:

    【解决方案2】:

    这是一个完全有效的问题,我面临同样的情况。谁有解决办法?

    更新

    我在 e.model.__data__ 中找到了 ID。但这感觉就像一个黑客攻击

    【讨论】:

      【解决方案3】:

      来了。我花了几个应用程序来解决这个问题。

      Polymer 将内部 ID 视为动态创建的 ID。因此,使用 Polymer 的 动态 ID 自动节点查找,您可以说:

      this.$$('#rowItem').itemForElement(event.target)
      

      如此处所述: https://www.polymer-project.org/1.0/docs/devguide/local-dom.html#node-finding

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多