2014-02-13 153 views
17

按照Polymer docs,因爲......聚合物和WebComponentsReady事件

的polyfills解析元素定義和異步處理的升級WebComponentsReady事件是必要的。如果您在DOM有可能升級之前過早地從DOM獲取元素,那麼您將使用HTMLUnknownElement。在這些情況下,等待WebComponentsReady事件與元素

我有進口的單一Web組件並註冊登錄,當所有網絡組件加載到語句的處理程序的HTML頁面交互之前:

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="bower_components/platform/platform.js"></script> 
     <link rel="import" href="elements/my-element.html"> 
    </head> 
    <body unresolved> 
     <my-element></my-element> 
     <script> 
      window.addEventListener('WebComponentsReady', function(e) { 
       console.log('components ready'); 
      }); 
     </script> 
    </body> 
</html> 

爲什麼WebComponentsReady事件在我的元素的ready聚合物事件之前發射?我需要知道什麼時候可以與自定義元素進行互動,例如,改變它的屬性並且調用它的公共方法。

回答

23

在聚合物1.0中,您可以只聽WebComponentsReady

在Polymer 0.5中,因爲它會異步執行更多的事情,所以會有一個額外的事件叫做polymer-ready,當您的元素被加載時會觸發它。這裏是a jsbin showing the order

+0

太好了,謝謝你提供的信息。完美運作。 – bitpshr

+0

由於OP中給出的原因,Fwiw,'WebComponentsReady'仍然由CustomElements填充。這在自己使用CustomElements聚合填充時非常有用。 另外fwiw,Polymer使用單獨的「聚合物就緒」事件來支持使用遠程樣式表的組件,而不使用FOUC。 –

+0

我有同樣的問題,但是因爲我在''聚合物準備好''''之後插入了我的自定義元素,所以我無法使用它,我需要聽取各個元素準備好的事件。不幸的是,這些元素在那個點上沒有準備好的函數''(例如myElement.ready(doSomething()))''',因爲polyfills稍後會添加這些方法。我能做些什麼來解決這個問題? –