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

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

1 Ответ

0 голосов
/ 19 февраля 2019

Это побочный эффект 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%'");
...