Я унаследовал довольно большую базу кода Javascript / ExtJS3, и есть много случаев вызова событий внутри переопределенного метода initComponent после вызова «... superclass.initComponent.apply (this, arguments)»,Определенные события вызываются для определенных объектов следующим образом:
this.filter.on('filterUpdated', function(filter, params)
Я начал преобразовывать код для использования парадигмы pub / sub, чтобы уменьшить связь между объектами и их конкретнымиИмена событий, но быстро сталкивались с проблемами при публикации и / или подписке на события внутри initComponent (который в ExtJS выполняется перед рендерингом).Мне нужно вызвать событие "INIT" из компонента самого высокого уровня, когда экран загружается впервые, и я либо получаю ошибку (из-за того, что ExtJS-шаблоны не были обработаны, как оказалось), либо события вообще не запускаются.
Затем я прочитал следующее в источнике ExtJS для Ext.Component (из которого выходят все компоненты), и у меня был момент "ага":
if (this.tpl) {
if (!this.tpl.compile) {
this.tpl = new Ext.XTemplate(this.tpl);
}
if (this.data) {
this.tpl[this.tplWriteMode](contentTarget, this.data);
delete this.data;
}
}
this.afterRender(this.container);
Когда я переключился на обаПубликуя событие «INIT» из метода afterRender моего верхнего компонента и подписываясь на все события от всех других компонентов из их методов afterRender, все работало, как я ожидал.И теперь мне просто интересно, во многом, чтобы проверить мой дизайн ...
Это общепринятый способ реализации pub / sub в пользовательском интерфейсе, управляемом событиями?Независимо от рамок даже?А именно, являются ли следующие 2 хорошими принципами или их другие способы?
- «События инициализации» должны публиковаться после того, как все подкомпоненты будут обработаны
- Все подкомпоненты должны подписаться на все события (чтобы быть в безопасности) после того, как они рендерились
Заранее спасибо