所以我想在dart中动态设置Id,但我无法访问它。 btn
将始终为null。 Chrome确实显示按钮获得了ID,但我无法访问Dart中的ID ..
// extended Td html
<polymer-element
name="crud-tr" extends="tr" attributes="metaData entry">
<script type="application/dart" src="crud-tr.dart"></script>
</polymer-element>
-
// extended Td Dart
@CustomTag('crud-tr')
class CrudTrElement extends TableRowElement with Polymer, Observable {
void attached() {
super.attached();
TableCellElement editTd = new TableCellElement();
ButtonElement edit_cancel = new ButtonElement();
edit_cancel
..text = "Edit"
..id = 'edit_cancel'
..onClick.listen((event) => toggleEditMode());
editTd.append(edit_cancel);
TableCellElement deleteTd = new TableCellElement();
ButtonElement delete_save = new ButtonElement();
delete_save
..id = 'delete_save'
..text = "Delete"
..onClick.listen((event) => deleteEntry());
deleteTd.append(delete_save);
this
..append(editTd)
..append(deleteTd);
}
void toggleEditMode() {
ButtonElement editBtn = this.shadowRoot.querySelector('#edit_cancel');
ButtonElement deleteBtn = this.shadowRoot.querySelector('#delete_save');
/* -> Both null / Exception */
}
CrudTrElement.created() : super.created() {
polymerCreated();
}
}
答案 0 :(得分:3)
这是预期的行为(按设计)。动态创建的元素不包含在$
可访问的地图中。您需要改为使用shadowRoot.querySelector('#someButton');
。
我猜问题是元素HTML中缺少的元素。为什么要强制添加这些元素而不是标记?您将元素添加为子元素而不是shadow DOM的内容。如果这是故意你需要使用this.querySelector()而不是shadowRoot.querySelector()
答案 1 :(得分:0)
&#34;异常:null对象没有方法&#39; querySelector&#39;。&#34;
该错误可能是因为<polymer-element>
定义没有<template>
吗?也许永远不会在该实例中创建影子DOM,因此shadowRoot
为null
。只是猜测......
我也想知道this..append()
是否将元素附加到shadow DOM。似乎不太可能。