已經有this question和this 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字符串。
我關心這個問題的原因是所討論的函數的性能不及格,所以我希望解決導致錯誤的問題可能會改善這一點(除了我更喜歡在控制檯上不顯示任何錯誤)。
那個線程真的很老。使用innerHTML時會調用生命週期事件:http://jsbin.com/haxaha/1/edit。我認爲在這種情況下,警告「核心工具提示上的屬性是聚合物升級元素之前的數據綁定」並不有用。 – ebidel 2014-10-11 17:11:56
@ebidel ......我所知道的是,它解決了問題,說實話,我現在只在Polymer工作了兩天,所以我纔開始瞭解底層技術。如果你可以給出一個解釋爲什麼這個問題的其他解釋,請回答,我會刪除這個答案。 – 2014-10-11 22:14:02
提交https://github.com/Polymer/polymer/issues/795 – ebidel 2014-10-12 01:44:11