我有一个使用 Vaadin 从 Java 调用 Javascript 的 Java 类:
@StyleSheet("https://cdn.jsdelivr.net/npm/[email protected]/dist/css/shepherd.css")
@JavaScript("https://cdn.jsdelivr.net/npm/[email protected]/dist/js/shepherd.min.js")
@JsModule("./scripts/shepherd.js")
public class MainView extends VerticalLayout {
public MainView() {
Button button = new Button("Click me");
button.addClickListener(c ->
UI.getCurrent().getPage().executeJs("window.startTour($0)", this);
}
@ClientCallable
public boolean get() {
return true;
}
}
在我的 shepherd.js Javascript 文件中,我将在 Java 中调用一个方法(注解 @ClientCallable):
window.startTour = (element) => {
let useModalOverlay = element.$server.get()
}
我只是在控制台中收到一个错误,而不是点击结果:
无法读取 null 的属性(读取“$server”)
我不知道我做错了什么,但我确定一切都很好。我只是没有看到问题。 如果你想知道为什么我调用 Javascript 然后从那里调用 Java,那是因为我使用 ShepherdJS 在 Javascript 中编写用户指南,因此我需要方法来调用 java 部分,因为 ShepherdJS 只是 javascript -> 另请参阅我昨天的问题例如。
如 文档 和
executeJs
Javadoc 中所述,如果在调用方法时未附加组件和元素参数,则它们将作为 null
发送。
在
onAttach
方法或 AttachListener 中移动调用
编辑:抱歉,我错过了按钮点击监听器。但后来我在本地尝试了你的例子,它按预期工作了