Когда shadowRoot доступен для полимерного компонента?

У меня проблемы с пониманием, когда доступ к shadowRoot компонента доступен. Вот изображение набора вложенных компонентов:

Итак, есть несколько компонентов:

MortgageDetails: компонент связывает группу из 3 других компонентовMoneyInput - компонент ввода сКоличество этикеткаNumWithUnitsInput - входной компонент сСрок этикеткаRateInput - входной компонент сТемп этикеткаPaymentSchedule: компонент с соответствующей меткойDateInput: компонент сДата начала этикетка

Я создал инструментарий для созданных и прикрепленных методов с выводом сообщения журнала в shadowRoot (sr => ...) и я получаю следующее:

mortgageDetails [FINE]: MortgageDetails created sr => null (:1)
moneyInput [FINE]:  MoneyInput created sr => null (:1)
numWithUnitsInput [FINE]:   NumWithUnitsInput created sr => null (:1)
rateInput [FINE]:   RateInput created sr => null (:1)
paymentSchedule [FINE]: PaymentSchedule created sr => null (:1)
dateInput [FINE]:   DateInput created sr => null (:1)
mortgageDetails [FINE]: MortgageDetails attached with sr => Instance of 'ShadowRoot' (:1)

Регистрация имеет смысл. Компоненты создаются в разумном порядке, а затем начинается присоединение. Однако проблема заключается в том, что данные ипотеки прикрепляются до того, как будет прикреплен содержащийся в них moneyInput. Если я добавлю еще один оператор журнала вMortgageDetails.attached Я вижу, что содержащийся в нем объект MoneyInput имеет shadowRoot:

mortgageDetails [FINE]: Composed moneyInput sr => Instance of 'ShadowRoot' (:1)

Это проблема того, как я делаю вещи. Мне нужно некоторое событие инициализации в компоненте MoneyInput, чтобы добраться до shadowRoot и прикрепить некоторые обработчики. Я не могу использоватьсозданный потому что shadowRoot еще даже не установлен. Я пытаюсь использоватьприложенный, У меня есть такой код в настоящее время вприкреплять MoneyInput:

  _amountElement = shadowRoot.querySelector('#money-amount')
    ..onBlur.listen((evt) => reformatAmount())
    ..onFocus.listen((evt) => reformatAmount())
    ..onKeyUp.listen((evt) { if(evt.which == 13) reformatAmount(); });

Так как MortgageDetails присоединяется, а MoneyInput еще не подключен, экземпляр MortgageDetails не может использовать содержащийся MoneyInput, как ему хотелось бы, поскольку он не полностью инициализирован. Например, в MortgageDetailsактивировать Я имею:

(mortgageAmountInput = $["mortgage-amount"] as MoneyInput)
  ..label = r" $ Amount of Loan"
  ..onBlur.listen((_) => recalc())
  ..onFocus.listen((_) => recalc());

Это не удается, потому что MoneyInputактивировать не был назван. Я думаю, что мне действительно нужно, это событие, которое говорит, что shadowRoot был установлен, тогда на этом событии я мог бы выполнить свою инициализацию.

Чего мне не хватает в жизненном цикле полимерных элементов?

Ответы на вопрос(2)

Ваш ответ на вопрос