[英]Dart: Can't access dynamically set Element Ids
所以我想在飞镖中动态设置一个ID,但是我无法访问它。 btn
将始终为null。 Chrome浏览器确实显示Button获得了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();
}
}
这是预期的行为(按设计)。 动态创建的元素不包含在$
可以访问的地图中。 您需要使用shadowRoot.querySelector('#someButton');
代替。
我猜问题出在元素HTML中缺少元素。 为什么要强制性地添加这些元素而不是标记? 您将元素添加为子元素,而不是阴影DOM的内容。 如果有意这样做,则需要使用this.querySelector()而不是shadowRoot.querySelector()
“异常:空对象没有方法'querySelector'。
该错误可能是因为<polymer-element>
定义没有<template>
吗? 也许从未在该实例中创建影子DOM,所以shadowRoot
为null
。 只是在这里猜...
我也想知道this..append()
将元素附加到影子DOM。 似乎不太可能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.