Vaadin 的 SplitLayout.setSplitterPosition(80) 仅在第一次有效;随后的电话似乎没有回应
Vaadin's SplitLayout.setSplitterPosition(80) only works the first time; subsequent calls do not seem to respond
在 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 浏览器调整拆分布局(通过拖动垂直布局),这样我 "close" (或只是缩小)第二个vertical "panel", and THEN 我再次点击按钮,它似乎不遵守将拆分器位置重置为 80 的命令。它似乎只遵守命令第一个电话。这是一个错误吗?如果是这样,是否有解决方法? (或者,我应该采取不同的做法吗?)
这是 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%'");
在 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 浏览器调整拆分布局(通过拖动垂直布局),这样我 "close" (或只是缩小)第二个vertical "panel", and THEN 我再次点击按钮,它似乎不遵守将拆分器位置重置为 80 的命令。它似乎只遵守命令第一个电话。这是一个错误吗?如果是这样,是否有解决方法? (或者,我应该采取不同的做法吗?)
这是 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%'");