在Dart Polymer中访问Shadow Dom中的html元素

时间:2014-01-07 16:31:17

标签: dart dart-polymer

我对Dart和Polymer很新,并且有一个我无法找到答案的问题。

我正在编写一个简单的单页应用程序,并希望访问聚合物元素的shadowDom中的buttonElement。 (SDK 1.0和Polymer 0.9.3,Dart稳定版)

就像我从文档和api中理解的那样,我应该使用:

@override
void enteredView() {
  super.enteredView();
  submitButton = $['submitButton'];
  submitButton.disabled = true;
}

现在是我的html:

<polymer-element name="..." attributes="..." >
  <template>
    ...
    <template repeat="{{ ... in ... }}">
      ...
    </template>
    <template if="{{...}}">
      ...
      <button id="submitButton" on-click="{{...}}">...</button>
    </template>
  </template>
</polymer-element>

在此模板中,当我在enterView方法的末尾打印$ [&#39; submitButton&#39;]时,我得到null。

但是:当我更改我的html模板并且不要将该按钮放在nestend模板标签中时:

<polymer-element name="..." attributes="..." >
  <template>
    ...
    <template repeat="{{ ... in ... }}">
      ...
    </template>
    <template if="{{...}}">
      ...
    </template>
    <button id="submitButton" on-click="{{...}}">...</button>
  </template>
</polymer-element>

我拿到了我的按钮,可以使用它。否则,在enteredView(button.disabled)中的最后一次调用会引发错误。

任何人都可以帮助我吗?我做错了什么?

提前致谢。

编辑:

只需启用/禁用按钮,就可以使用Dart中的特殊表达式来禁用该属性。

<button disabled?="{{buttonDisabled}}">

这将导致删除并添加disabled属性。 在if或repeat模板中查找元素仍然不能像那样工作。

1 个答案:

答案 0 :(得分:0)

使用<template repeate="...">方法访问template if="...">$['id']中的元素无法使用。
Dart小组最近对此进行了讨论。我认为应该有一个功能请求,但还是找不到它们。

我不确定shadowRoot.querySelector('#id')是否有效。

如果没有,则AFAIK唯一的选项是MutationObserver,例如此处dart-polymer-dart-examples / web / mutation_observers /,因为在将元素插入DOM之前无法访问该元素。

修改