В моем приложении я использую подход, описанный в ответе Эрика (получить родительский компонент во время onAttach
перенаправленного просмотра). Однако я немного его расширил и использую интерфейсы для предотвращения дублирования кода. Вот мои настройки:
public class MainView extends HorizontalLayout implements RouterLayout {
public MainView(){
...
}
public interface Retriever extends HasElement {
default MainView getMainView() {
Component parent = getElement().getComponent().orElse(null);
while (parent != null && !parent.getClass().equals(MainView.class)) {
parent = parent.getParent().orElse(null);
}
return (MainView)parent;
}
}
}
@Route("main")
public class MainRoute extends VerticalLayout implements MainView.Retriever {
public MainRoute(){
...
}
@Override
public void onAttach(){
MainView mainView = getMainView();
if (mainView != null){
mainView.someCode(); // do with the mainView what you want here
} else {
LOGGER.error(...);
}
}
}
обратите внимание, что мой routerLayout называется MainView, а не MainLayout. Я не хотел менять это имя, так как имя «MainView» используется для размещения маршрутизатора в большинстве официальных документов и примеров