我想在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>