Dart 动态添加包含聚合物信号的聚合物元素会引发异常

Dart 动态添加包含聚合物信号的聚合物元素会引发异常,dart,dart-polymer,Dart,Dart Polymer,对于Polymer,我实现了一个自定义表单,它使用Polymer\u signals.html来监听来自任意其他Polymer元素的更改 它是这样实现的: ... 该元素在父聚合物元素中动态实例化,如下所示: var userSettings=newelement.tag('form','user settings'); $['main'].children.add(用户设置); 这引发了一个例外: 异常:迭代期间的并发修改:“\u GrowtableList”的实例(长度:4)_noti

对于Polymer,我实现了一个自定义表单,它使用
Polymer\u signals.html
来监听来自任意其他Polymer元素的更改

它是这样实现的:


...
该元素在父聚合物元素中动态实例化,如下所示:

var userSettings=newelement.tag('form','user settings');
$['main'].children.add(用户设置);
这引发了一个例外:

异常:迭代期间的并发修改:“\u GrowtableList”的实例(长度:4)_notify@0x1c4cf589 (http://127.0.0.1:3030/buddy/web/packages/polymer_elements/polymer_signals/polymer_signals.dart:39:12)
(http://127.0.0.1:3030/buddy/web/packages/polymer_elements/polymer_signals/polymer_signals.dart:49:12)

如果静态实例化聚合形式,则不会出现此错误。我怎样才能防止这种情况发生?

我无法重现您的问题

有两件常见的事情经常被忽略

  • 如果您有一个自定义的
    main
    方法
    看到答案了吗

  • 在扩展DOM元素的元素的构造函数中调用
    super.polymerCreated()
    。 看到答案了吗


  • 如果您仍然无法解决问题,请在问题中添加更多代码(例如,用户设置元素的外观)。

    如果您正在使用聚合元素,请单击“酷”。希望我们能很快发布一个新版本(不过还有一些问题需要解决)。对不起,我已经太累了,无法调查。我明天查一下,然后回答。乍一看,这好像是一只聚合物虫。这可能是一个可行的解决办法。我必须尝试一些方法……我会看看是否能更好地隔离问题。从异常情况来看,它看起来像是一些并发性问题,因为我有几个
    的实例。但只有一个是动态添加的,我让它静态添加两次,动态添加两次(一个在普通的聚合元素中,一个在从form元素派生的聚合元素中)。你核实了我答案中的要点了吗?我执行代码是为了在
    main()
    中动态添加元素,而不是在另一个元素的方法中。您的
    新元素.tag()
    代码使用哪种方法?我现在已经做了更多的测试。我一定会检查你的建议,但这不是问题所在。我认为问题在于,在侦听由聚合信号触发的事件时,会调用添加包含
    的元素的代码。由于polymer signals当前正在迭代其所有侦听器,因此无法添加另一个侦听器,因为它没有并发保护。我测试了在聚合物信号之外添加我的元素,它是有效的。它还可以将新元素的创建包装在未来或延迟之后。Bug?我还没有移植这个元素,也没有使用过,所以我的知识有限。我同意你的推理。当我看到抛出异常的代码时,这是我的第一个想法。但是,这如何与添加元素的方法相联系呢?我想一个解决办法是迭代
    \u信号
    列表的副本。您使用的是polymer\u元素的托管版本还是GitHub repo的克隆版本?