Rails等待Turbolinks加载以执行JavaScript导入



我想在application.html.erb中调用一个JavaScript函数。该函数在application.js:中导入并提供

import myFunction from 'myJSModule';
window.myFunction = myFunction;

我使用的是turbulinks和vite_rails,似乎JS函数是在加载application.JS之前调用的,而且它是未定义的。

示例:

application.html.erb

<html>
<head>
<script type="text/javascript">

</script>
<%= vite_javascript_tag "application", 'data-turbolinks-track': "reload" %>
<%= render "layouts/partial" %>  # here I call the window.myFunction
</head>
<body></body>
</html>

layouts/_partial.html.erb

<script>
window.myFunction
</script>

行为:
window.myFunction未定义
当我尝试在控制台中调用函数时,加载侧面之后,它就被定义了。此外,当我等待涡轮链接:负载事件:

document.addEventListener("turbolinks:load", function() { window.myFunction }

该事件的问题是,它在每个导航事件中都会被触发,但我只想在分部重新渲染时调用该函数。我最近从webpack迁移到了vite。对于webpack,解决方案似乎是将render部分移到java_script_tag下面。不幸的是,这不适用于vite。

我可以找到一个解决方案。用module:附加脚本的属性类型

<script type="module">
window.myFunction
</script>

最新更新