vaadin - 无法在 Vaadin View 中从 @JavaScript import 调用 JS 函数

标签 vaadin vaadin-flow

我有这样的 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/

相关文章:

tomcat - 构建一个可以通过Maven Tomcat插件部署的war文件

java - Spring security 阻止从后台线程导航到另一个 View

vaadin10 - 使用 Vaadin Flow 的用户 session

鼠标滚轮上的 Vaadin 水平滚动

java - 如何在 Vaadin 的另一个类中使用路由器布局类的变量/方法?

java - 通过 JavaScript 与 Vaadin 代码处理事件是否有任何服务器负载平衡优势?

javascript - 如何制作宽度为 1px 的 Vaadin 网格列?

java - 如何正确部署 webapp 到 openshift?

java - 如何更改前端文件夹位置并在 Vaadin 14 中进行配置?

vaadin - 如何集中处理DataProvider方法中抛出的异常