2014-10-11 74 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