Ruby на рельсах Вызов javascript Функция - PullRequest
2 голосов
/ 10 февраля 2020

Вот мое приложение. html .erb с тегом h1 и onclick execute JS function greatTutorial().

## application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title>Dealabs</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <div class="container">
      <%= render "layouts/navbar" %>
      <h1 onclick="greatTutorial()">Hello World</h1>
        <% if notice %>
          <p class="notice alert alert-info"><%= notice %></p>
        <% end %>
        <% if alert %>
          <p class="alert alert-danger"><%= alert %></p>

        <% end %>
      <%= yield %>
    </div>
  </body>
</html>

И мой javascript / pack / application . js

##javascript/pack/application.js

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")

function greatTutorial() {
    alert('Rails Guides are the best');
}

Я последовал за несколькими запросами, но ничего не получалось. Если я заменил свою функцию onclick на h1 onclick="alert('danger')", она работает нормально. Но я не понимаю, почему моя функция greatTutorial не определена (никогда не существует).

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Однако есть обходной путь. В Rails 6 вы можете изменить сигнатуры функций с:

function myFunction() { ... }

на:

window.myFunction = function() { ... }

Итак, в соответствии с вашим кодом попробуйте следующее: -

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")


window.greatTutorial = function() {
    alert('Rails Guides are the best');
}
0 голосов
/ 10 февраля 2020

Переименуйте ваш application.js в javascript.js или main.js

Это необходимо, если у вас есть приложение. css и приложение. js в каталоге пакетов. Поскольку webpack обрабатывает css файлы особым образом и создает. js extensions.

Ознакомьтесь с аналогичной проблемой, о которой сообщалось здесь , для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...