Как вызвать внутренние методы из JS независимо от Vaadin View? - PullRequest
1 голос
/ 13 марта 2020

У меня есть следующий сценарий. Javascript выполняется во внешнем интерфейсе и реагирует на события. Если событие перехватывается, вызывается указанный c метод бэкэнда.

Я инициализирую бэкэнд следующим образом. Метод вызывается во время инициализации одного из моих Vaadin 14 представлений.

window.init = function(element) {
    window.element = element;
    ...
}

Представление:

public class TestView extends Div {
   public TestView() {
      ...
      UI.getCurrent().getPage().executeJs("init($0)", this);
   }
}

позже методы вызываются с window.element.$server.onTestEvent(); на внешнем интерфейсе.

Метод вызываемого бэкэнда:

@ClientCallable
private void onTestEvent() {
    System.out.println("Test");
}

Теперь проблема:

Я передаю представление как element.

Если я изменю представление, пройденный мною element будет уничтожен, поэтому событие (на стороне сервера) не может быть выполнено, даже если оно перехватывается на внешнем интерфейсе.

Имеет Vaadin 14 предоставить способ хранения объектов «глобально» по всем представлениям? Я хочу, чтобы приложение реагировало на события, независимо от того, какое представление я в данный момент посещаю.

1 Ответ

5 голосов
/ 13 марта 2020

Самым простым решением было бы использование элемента основного макета верхнего уровня (представление контейнера / MainView) вместо элементов отдельных представлений.

...