Dart:无法访问动态设置的Element Ids

时间:2014-10-21 13:28:47

标签: dart polymer dart-polymer

所以我想在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();
    }
}         

2 个答案:

答案 0 :(得分:3)

这是预期的行为(按设计)。动态创建的元素不包含在$可访问的地图中。您需要改为使用shadowRoot.querySelector('#someButton');

更新

我猜问题是元素HTML中缺少的元素。为什么要强制添加这些元素而不是标记?您将元素添加为子元素而不是shadow DOM的内容。如果这是故意你需要使用this.querySelector()而不是shadowRoot.querySelector()

答案 1 :(得分:0)

&#34;异常:null对象没有方法&#39; querySelector&#39;。&#34;

该错误可能是因为<polymer-element>定义没有<template>吗?也许永远不会在该实例中创建影子DOM,因此shadowRootnull。只是猜测......

我也想知道this..append()是否将元素附加到shadow DOM。似乎不太可能。