Выполнение JS-кода в приложении Vaadin 14 ничего не делает - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь сделать простую прокрутку вниз при загрузке страницы.

@Route("somthing")
public class SomeView extends VerticalLayout{

public SomeView(){
    ...
    Adding some Elements
    ...

    UI.getCurrent().getPage().executeJs("window.scroll(0,300)");
}
}

Я также пытался добавить слушатель в окно:

 UI.getCurrent().getPage().executeJs("window.addEventListener('onload', function(){console.log('trigger');window.scroll(0,300);});");

Но в обоихВ случаях, когда страница загружается, ничего не происходит.

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Как упоминал Олли в комментариях, второе не работает, потому что событие onload уже произошло, когда вы добавляете обработчик событий.

Я считаю, что первое не работает, потому что SomeView еще не был прикреплен к странице (поскольку вы выполняете js в конструкторе), поэтому на странице недостаточно содержимого для прокрутки.
Вы должны выполнить этот javascript в методе onAttach представления.

@Route("somthing")
public class SomeView extends VerticalLayout{

    public SomeView(){
        ...
    }

    @Override
    public void onAttach(AttachEvent attachEvent) {
        UI.getCurrent().getPage().executeJs("window.scroll(0,300)");
    }
}
1 голос
/ 11 ноября 2019

Просто используйте getElement () вместо UI.getCurrent (). GetPage ()

@Route("something")
public class SomeView extends VerticalLayout{

  public SomeView(){
    ...
    Adding some Elements
    ...

    getElement().executeJs("window.scroll(0,300)");
  }
}

в конструкторе вашего SomeView .

...