2014-10-11 53 views
0

已经有this questionthis question,但尽管这两个问题都触发相同的错误,但它们的解决方案和原因并不相同。我有一个标签在应用程序的整个生命周期内异步加载内容。该内容反过来包含导致错误的自定义元素。下面是最简单的测试案例重现此错误(假设聚合物里设置了凉亭,否则进口会显得略有不同):异步插入包含自定义元素的内容

base.html文件

<link rel="import" href="bower_components/polymer/polymer.html"> 
<link href="asynchronousTag.html" rel="import"> 
<asynchronous-tag></asynchronous-tag> 

asynchronousTag.html

<link rel="import" href="bower_components/polymer/polymer.html"> 
<link rel="import" href="bower_components/core-tooltip/core-tooltip.html"> 
<polymer-element name="asynchronous-tag"> 
    <template> 
     <div id="text"></div> 
    </template> 
    <script> 
     Polymer({ 
      ready:function(){ 
       var that = this; 
       setTimeout(function(){ 
        that.$.text.innerHTML = 
           '<core-tooltip label="testing">tester</core-tooltip>'; 
       }, 2500); 
      } 
     }); 
    </script> 
</polymer-element> 

触发错误

核心工具提示上的属性是聚合物升级元素之前的数据绑定。这可能会导致不正确的绑定类型。

尽管按预期工作。当<core-tooltip>属性较少时也会发生同样的情况。然而,这确实不插入使用相同的节点时发生

var ct = document.createElement("core-tooltip"); 
ct.innerHTML = "html"; 
ct.setAttribute("label","text"); 
that.$.text.appendChild(ct); 

然而这可悲的是没有帮助我的一切,就像我的内容是一个完整的HTML字符串。

我关心这个问题的原因是所讨论的函数的性能不及格,所以我希望解决导致错误的问题可能会改善这一点(除了我更喜欢在控制台上不显示任何错误)。

回答

0

在完成写作我的问题之后,我浏览了Polymer邮件组,发现this mailing。其中有人说,

Element.innerHTML不触发生命周期回调,它没有得到升级。

换句话说,解决的办法是

var div = document.createElement("div"); 
div.innerHTML = '<core-tooltip>tester</core-tooltip>'; 
that.$.text.appendChild(div.childNodes[0]); 

是的,这是没有意义的......这就是为什么我与世界分享它毕竟。

+0

那个线程真的很老。使用innerHTML时会调用生命周期事件:http://jsbin.com/haxaha/1/edit。我认为在这种情况下,警告“核心工具提示上的属性是聚合物升级元素之前的数据绑定”并不有用。 – ebidel 2014-10-11 17:11:56

+0

@ebidel ......我所知道的是,它解决了问题,说实话,我现在只在Polymer工作了两天,所以我才开始了解底层技术。如果你可以给出一个解释为什么这个问题的其他解释,请回答,我会删除这个答案。 – 2014-10-11 22:14:02

+0

提交https://github.com/Polymer/polymer/issues/795 – ebidel 2014-10-12 01:44:11