Vaadin的SplitLayout.setSplitterPosition(80)仅在第一次工作;后续电话似乎没有回应

问题描述 投票:0回答:1

在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浏览器调整分割布局(通过拖动垂直布局),以便我“关闭”(或只是减小尺寸)第二个垂直“面板”,然后我再次点击按钮,它似乎没有遵守将分离器位置重置为80的命令。它似乎只是在第一次调用时服从命令。这是一个错误吗?如果是这样,有解决方法吗? (或者,我应该这样做吗?)

vaadin vaadin12
1个回答
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%'");
© www.soinside.com 2019 - 2024. All rights reserved.