SplitLayout.setSplitterPosition(80) Vaadin работает только в первый раз; последующие звонки, кажется, не отвечают

В 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. Кажется, она подчиняется только команде при первом вызове. Это ошибка? Если так, есть ли обходной путь? (Или я должен сделать это по-другому?)

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%'");
Другие вопросы по тегам