Использование JavaScriptComponent

Есть задача вызвать из класса экрана пользовательский JS-метод. Согласно документации в Jmix для этого есть JavaScriptComponent. В документации не очень четко описано, где нужно размещать js-скрипт и как его именовать. Пытаюсь делать так:

  1. В папке resources\VAADIN создаю подпапку beeper и размещаю в ней скрипт beeper-connector.js:
ru_company_jmix_screen_component_Beeper = function() {
    let connector = this;
    let element = connector.getElement();
    element.innerHTML = "<div/>";

    this.onStateChange = function () {
        connector.beep = function () {
            alert('BEEP!!!');
        };
    }
};
  1. В дескрипторе экрана добавляю jsComponent
<jsComponent 
    id="beeper"         
    initFunctionName="ru_company_jmix_screen_component_Beeper">
</jsComponent>
  1. В класс экрана добавляю поле JavaScriptComponent:
    @Autowired
    protected JavaScriptComponent beeper;
  1. Вставляю вызов JS-метода в методе экрана:
    @Subscribe("text")
    public void onEnterPress(TextInputField.EnterPressEvent event) {
        beeper.callFunction("beep");
    }
  1. Запускаю приложение. При открытии экрана на месте jsComponent вижу сообщение об ошибке:
Could not initialize JavaScriptConnector because no JavaScript init function was found. Make sure one of these functions are defined: 
ru_company_jmix_screen_component_Beeper

Подскажите, пожалуйста, что я делаю не так. Спасибо!

У вас файл beeper-connector.js не добавлен в зависимости jsComponent

1 симпатия

@yarik1706, спасибо большое! Точно так. Добавил путь к скрипту в dependencies и всё заработало. Я подумал, что в dependencies добавляются только внешние библиотеки для скрипта. А основной скрипт Jmix как-то сам находит по имени функции. Не внимательно документацию прочитал. Спасибо!