Жизненный цикл полимера: почему свойства еще не загружены из атрибутов DOM при обратном вызове "Attached"?
Мне очень трудно понять жизненные циклы полимерных элементов.
Предположим, у меня есть пользовательский элемент с одним свойством fooBar
, И предположим, я поставил fooBar
как атрибут на атрибуте, как это так.
<custom-element foo-bar="text"></custom-element>
Теперь скажем, я хотел бы использовать fooBar
программно как свойство при создании жизненного цикла элемента. Так что-то вроде.
Polymer({
is: "custom-element",
properties: {
fooBar: {type: String}
},
ready: function(){
console.log(this.fooBar)
},
attached: function(){
console.log(this.fooBar)
}
})
Насколько я могу судить, свойство элемента fooBar не загружается из атрибута DOM fooBar до тех пор, пока ready
а также attached
называются. Это верно даже тогда, когда я вызываю async изнутри готовых и прикрепленных обратных вызовов.
Кто-нибудь может объяснить (1), где в жизненном цикле свойства элемента импортируются из атрибутов DOM и (2) как программно получить доступ к этим атрибутам, чтобы выполнить некоторую работу по настройке элемента?
1 ответ
Если вы читали о Custom Element Spec, в жизненном цикле элемента есть этот обратный вызов attributeChangedCallback(name, oldVal, newVal)
где его удобно переименовать в Polymer как attributeChanged(type, name)
, Однако это не предпочтительный способ прослушивания атрибутов, вместо этого вы присоединяете наблюдателя к этому свойству, в данном случае на fooBar
,
Вот пример jsbin. Ты это видишь fooBarChanged
вызывается первым, прежде чем attached
а также ready
,