Когда 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 был установлен, тогда на этом событии я мог бы выполнить свою инициализацию.
Чего мне не хватает в жизненном цикле полимерных элементов?