当我们的元素层次结构覆盖了父函数时,有时会遇到“超出最大堆栈大小”的情况。最近,我注意到错误在以下情况下逐渐蔓延:
<polymer-element name="element-a" noscript></polymer-element>
<polymer-element name="element-b" extends="element-a">
<script>
Polymer('element-b', {
attached: function () { this.super(); }
});
</script>
</polymer-element>
<polymer-element name="element-c" extends="element-b">
<script>
Polymer('element-c', {
attached: function () {this.super(); }
});
</script>
</polymer-element>
http://jsbin.com/guqeyome/2/edit
我的想法是,如果元素A没有“附加”功能,则元素C中的超级调用最终将什么也不会调用。取而代之的是,它调用元素B的“ attached”函数,从而引发了无限递归的情况。解决方案是在元素A中具有一个空的“附加”功能。
这是设计使然吗?难道我做错了什么?是虫子吗?
最佳答案
该问题的“答案”:
现在,请确保每当元素调用super
时都存在一个超级函数。
该问题已通过https://github.com/Polymer/polymer/issues/476在上游修复。