【问题标题】:Polymer.dart How to query for nodes inside the shadow root of a child custom elementPolymer.dart 如何查询子自定义元素的影子根内的节点
【发布时间】:2013-09-12 08:10:22
【问题描述】:

我有一个父组件作为其他组件的容器。我希望容器能够查询其组件内的元素。比如我的外部组件是:

<polymer-element name="task-dart">
  <template>
      <div class="task-list">
        <template repeat="{{tasks}}">
          <task-row task="{{}}"></task-row>
        </template>
      </div>
  </template>
  <script type="application/dart" src="taskdart.dart"></script>
</polymer-element>

我的内部组件是:

<polymer-element name="task-row" attributes="task">
  <template>
      <div class="task">
         <!-- html components of the task -->
      </div>
  </template>
  <script type="application/dart" src="task_row.dart"></script>
</polymer-element>

但 taskdart.dart 中的以下两项均不会产生任何结果:

void created() {
    super.created();

    print(queryAll(".task").toString()); // []
    Timer.run( () {
        print("queryAll: " + queryAll(".task").toString()); // []
    });
} 

这是因为 css 是在内部组件中限定的,还是因为在初始化期间此时没有什么可查询的?无论哪种方式,我将如何解决它?

【问题讨论】:

  • 您正在跨越影子根边界。因此,您正在破坏封装。并不是说不可能,但您可能会想到如何做到这一点,而无需了解自定义元素的内部结构。

标签: dart dart-webui polymer


【解决方案1】:

尝试使用shadowRoot。它仍然不会完全按照您的要求进行(但是,会获取 `.task' 元素的列表。

自动将聚合物元素的顶级&lt;template&gt; 的内容放入影子根中。这意味着task-dart无法查询子&lt;task-row&gt;s中的div(它们包含在&lt;task-row&gt;的影子根中),它只能查询它自己的影子根以获得任务列表行。

Timer.run( () {
  print("queryAll: " + this.shadowRoot.queryAll("task-row").toString()); // [task-row, task-row, task-row, task-row]
});

Polymer project has some links to Shadow DOM resources 如果您需要一些背景阅读。

【讨论】:

  • 从那里我可以使用 taskRows[index].shadowRoot.query('.task') 获得我想要的内部 div
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
相关资源
最近更新 更多