在Dart如何在嵌套模板中查询元素?

时间:2013-09-20 02:40:01

标签: html5 dom asynchronous dart

我在Dart中有一些嵌套模板,如下所示:

<template id="id1">
<template id="id2">
<input type= id={{xxx}}>
</template>
</template>

在这种情况下,如何查询输入元素?我尝试了嵌套的Timer.run,但它没有用。

query("#id1").model = xxxx
Timer.run({ query("#id2").model=xxxxx;
   Timer.run({ print(query(xxx));});
});

任何人都有任何建议?

谢谢!

=============================================== =========================

注意:嵌套模板实际上在一个表中,代码如下:

    <div style="cursor:crosshair; -webkit-user-select: none; user-select: none;">
    <table id="base_table" style="border-collapse:collapse; position: absolute; top:200px; left:200px; width:800px; height:400px" border="2">
    <template id="table" repeat>  
    <tr>
    <template id={{id}} repeat>  
    <td>  <label style="border:0px; height:18px; width:80px" id={{Cell_ID}}> {{Cell_data}} </label> </td>
    </template>
    </tr>
    </template>
    </div>

1 个答案:

答案 0 :(得分:2)

最好的办法是使用MutationObserver:

final observer = new MutationObserver(() {
  ... code here ...

  observer.disconnect();
})..observe(node, childList: true, subtree: true);

很快,这个方法将在PolymerElement中提供:

onMutation(() => ... code here ...);

如上所述,它将自动断开观察。实施很简单:

void onMutation(Node node, void listener(MutationObserver obs)) {
  final observer = new MutationObserver(() {
    listener(observer);
    observer.disconnect();
  })..observe(node, childList: true, subtree: true);
}

因此,对于您的特定示例,请粘贴onMutation函数,然后将其写为:

var id1 = query("#id1");
id1.model = xxxx
onMutation(id1.parent, (_) {
    var id2 = query("#id2");
    id2.model = xxxxx;
    onMutation(id2.parent, (_) {
      print(query(xxx));
    });
});