我对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模板中查找元素仍然不能像那样工作。
答案 0 :(得分:0)
使用<template repeate="...">
方法访问template if="...">
或$['id']
中的元素无法使用。
Dart小组最近对此进行了讨论。我认为应该有一个功能请求,但还是找不到它们。
我不确定shadowRoot.querySelector('#id')是否有效。
如果没有,则AFAIK唯一的选项是MutationObserver
,例如此处dart-polymer-dart-examples / web / mutation_observers /,因为在将元素插入DOM之前无法访问该元素。
修改强>