在Vaadin 12中,我创建了一个按钮,单击该按钮会将拆分布局位置设置为某个非零,非100的值,如下所示:
btnHelp.addClickListener(event -> {
log.info("info pressed");
MainApp.sp.setSplitterPosition(80);
MainApp.iFrameHelp = new Html( "<iframe src=\"https://docs.readthedocs.io/en/latest/intro/getting-started-with-sphinx.html/intro/getting-started-with-sphinx.html\"></iframe>");
//btnHelp.setIcon(new Icon(VaadinIcon.INFO_CIRCLE));
});
这很好。但是,如果我假装自己是用户,并且通过Chrome浏览器,我会调整拆分布局(通过拖动垂直布局),以便“关闭”(或只是减小其尺寸)第二个垂直“面板”,并且 THEN 我再次单击该按钮,似乎没有遵从将分离器位置重置为80的命令。它似乎仅在第一次调用时遵从了命令。这是错误吗?如果是这样,是否有解决方法? (或者,我应该采取其他方式吗?)
答案 0 :(得分:1)
这是https://github.com/vaadin/vaadin-split-layout-flow/issues/50的副作用。基本上发生的是,服务器端仍然认为拆分位置设置为80,这使其忽略了setSplitterPosition(80)
调用。
您可以通过使用低级API绕过服务器的脏检查逻辑来设置位置来解决此问题:
MainApp.sp.getPrimaryComponent().getElement().executeJavaScript(
"this.style.flexBasis='80%'");
MainApp.sp.getSecondaryComponent().getElement().executeJavaScript(
"this.style.flexBasis='20%'");