繁体   English   中英

Dart:无法动态访问设置的元素ID

[英]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,所以shadowRootnull 只是在这里猜...

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM