2015-05-12 49 views
1

Polymer docs,大部分回調的生命週期很清楚:在聚合物組件的生命週期中更改時,觀察者爲聲明性指定的值觸發?

created -> ready -> attached -> domReady 
    ^        | 
    |        | 
    ---------- detached <---------- 

和我想象attributeChanged()將在這個生命週期的任何一點被解僱時的屬性被修改,例如甚至早在創建時:

created: function() { 
    this.attribute = 'newValue'; 
} 

但是,如果我的元素的一個實例被聲明性地提供了一個值呢?

<my-element attribute="newValue"></my-element> 

在元素生命週期中的屬性更改觀察者在這種情況下發射?

+0

一個簡單的測試,可以判斷你的答案的元素,但我猜想,一個硬編碼值(不像dom-set值)在技術上沒有改變,直到它被改變。 – dandavis

回答

2

不是100%我明白你的意思,但是使用一個簡單的測試發現attributeChanged事件在attached之後和domReady之前調用。但是,從ready開始,屬性值已經可讀。這很容易理解,因爲attributeChanged事件是通過javascript回調函數調用的,這同樣適用於domReady事件,但它們不會在代碼已經運行時立即觸發。

如果您在created事件中設置了值,它將以任何方式反映(當然除了您指定它的函數本身之外)將會反映而不是。屬性處理後created事件,但之前ready事件。


如果你想看到自己這一點:

<my-element myAttribute="attributeValue"></my-element> 

和本身被定義爲

<polymer-element name="my-element" attributes="myAttribute"> 
    <template> 
    <span>Hello from <b>my-element</b>. This is my Shadow DOM.</span> 
    </template> 
    <script> 
    Polymer({ 
     created: function() { 
     //has no effect on the element: 
     //this.myAttribute = "newValue"; 

     console.log("created", this.myAttribute); 
     },   
     ready: function() { 
     //works fine: 
     //this.myAttribute = "newValue"; 

     console.log("ready", this.myAttribute); 
     }, 
     attached: function() { 
     console.log("attached", this.myAttribute); 
     }, 
     domReady: function() { 
     console.log("domReady", this.myAttribute); 
     }, 
     myAttributeChanged: function() { 
     console.log("myAttributeChanged", this.myAttribute); 
     } 
    }); 
    </script> 
</polymer-element> 
+0

謝謝你的回答,大衛!我在剛剛發現的服務(ele)上用runninng版本證實了這一點:https://ele.io/e/ZJIJZhYGgx –