在我的应用程序中,我使用 Erik 的回答中描述的方法(在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”用于大多数官方文档和示例中的路由器布局