我有这样的 Vaadin View :
@Route()
@JavaScript(value="scripts/print.js")
public class PrintableView extends BaseView {
@Override
public void setParameter(BeforeEvent event, @OptionalParameter String parameter) {
super.setParameter(event, parameter);
}
@Override
protected void onAttach(AttachEvent attachEvent) {
UI.getCurrent().getPage().executeJs("printWhenLoaded($0);",".layout");
}
}
以及 JavaScript 导入:
function printWhenLoaded(selector) {
setTimeout(function () {
var e = document.querySelector(selector);
if(e && e.innerHTML.length) {
window.print();
window.close();
}
else printWhenLoaded(selector)
}, 200)
};
//printWhenLoaded('.layout');
导入成功加载(最终),因为当我取消注释最后一行时,它起作用了。但是,当尝试从 onAttach 方法调用它时,我在浏览器控制台中看到一个错误,指出“printWhenLoaded”未定义。
看来在onAttach时,JS文件实际上还没有被浏览器加载。
最佳答案
您的问题是您没有在正确的范围内定义函数,而不是文件没有从 onAttach
方法加载和可用。最简单的方法是在 window
对象中定义函数:
window.printWhenLoaded = function (selector) {
// ...
}
关于vaadin - 无法在 Vaadin View 中从 @JavaScript import 调用 JS 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76154456/