Я интегрировал некоторый код HTML / JS в свое веб-приложение Vaadin, создав AbstractJavaScriptComponent. Компонент почти работает так, как задумано.
Как вызвать метод passInfo(), определенный в «connector.js», без необходимости вручную нажимать кнопку, определенную в innerHTML компонента «chessControll.JsLabel» в «chessControll.js». Моя цель - передать информацию при вызове события onChange функции init(), которое находится в том же файле «chessControll.js», но не является частью компонента.
Я уже пытался создать настраиваемое событие, а затем отправлять его всякий раз, когда вызывается onChange() в функции init(), это работало, пока я не прослушивал событие внутри моего компонента (chessControll.js, chessControll.JsLabel). Кажется, к нему можно получить доступ только статическим способом.
Как я могу получить доступ к ChessControll.JsLabel в «chessControll.js» из функции init(), а затем отправить нажатие кнопки или прослушивание событий внутри компонента для достижения того же?
connector.js:
com_*myname*_*applicationName*_JsLabel = function() {
var mycomponent = new chessControll.JsLabel(this.getElement());
connector = this;
this.onStateChange = function() {
mycomponent = this.getState().boolState;
};
mycomponent.click = function() {
connector.passInfo(true);
};
};
ChessControll.js:
var chessControll = chessControll || {};
chessControll.JsLabel = function (element) {
element.innerHTML =
"<input type='button' value='Click'/>";
// Getter and setter for the value property
this.getValue = function () {
return element.
getElementsByTagName("input")[0].value;
};
var button = element.getElementsByTagName("input")[0];
var self = this;
button.onclick = function () {
self.click();
};
};
var init = function() {
var onChange = function() {
/*Click Button defined in JsLabel Component */
};
};$(document).ready(init);



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я понял, в чем проблема.
Архитектура веб-приложений Java не допускает простого взаимодействия, как в моем примере. JavaScript сделал вызов со стороны клиента компоненту Vaadin на стороне сервера.
Я интегрировал весь JavaScript, включая функцию init, как компонент. Таким образом, я могу вызвать метод из функции инициализации, потому что на стороне сервера все известно.
отредактировал chessControll.js:
var chessControll = chessControll || {};
chessControll.JsLabel = function (element) {
element.innerHTML =
"<input type='button' value='Click'/>";
// Getter and setter for the value property
this.getValue = function () {
return element.
getElementsByTagName("input")[0].value;
};
var button = element.getElementsByTagName("input")[0];
var self = this;
//deleted bracket here
var init = function() {
var onChange = function() {
self.click();
};
};$(document).ready(init);
} //<-- that Simple