Я использую Ruby в Rails 6.0.3. Если я сохраню код javascript в app/assets/javascript/packs/file.js
, а затем включу его с javascript_pack_tag()
, функции в коде не будут работать должным образом.
Например, у меня есть BlogApp с контроллером блога.
app/assets/javascript/packs/file.js
function notifySend(arg) {
console.log(arg)
}
function notify(arg) {
notifySend(arg)
}
app/views/layouts/blog.html.erb
<!DOCTYPE html>
<html>
<head>
<title><%= @page_title %></title>
<meta charset="utf-8">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= javascript_pack_tag 'file', %s(data-turbolinks-track) => 'reload' %>
</head>
<body>
<script>notify('hello!')</script>
</body>
</html>
При открытии localhost:3000/blogs
я получаю :
ReferenceError: notify is not defined
В консоли браузера.
Но если я немного изменю file.js
, например:
function notifySend(arg) {
console.log(arg)
}
notify = function(arg) {
notifySend(arg)
}
javascript работает нормально, и я получаю "привет!" в консоль браузера!
Итак, есть хлопоты переписать функции.
Но для больших JS файлов или уменьшенных файлов это может занять много времени. Каждую функцию, которая вызывается из тега script
в теле, необходимо переписать.
Как сохранить неповрежденный код js (как в примере 1) и заставить его работать с рельсами?