如何在 Rails 6 中执行自定义 javascript 函数

Joh*_* B. 8 javascript ruby-on-rails webpacker

随着 Webpacker 加入 Ruby On Rails,我找不到使用 JavaScript 函数的方法。

我有一个app-globals.js用函数调用的文件来测试:

function alerts() {
  alert("TEST")
}
Run Code Online (Sandbox Code Playgroud)

然后我想在我的一个观点中使用它:

<% = button_tag 'Button', type: 'button', onClick: 'alerts ()'%>
Run Code Online (Sandbox Code Playgroud)

但是当我按下按钮时,这个错误显示在浏览器控制台中:

ReferenceError: alerts is not defined

  1. 我将app-globals.js文件放入"app/javascript""app/ javascript/packs/application.js"放入 require ("app-globals")。

  2. 我将 app-globals.js 移至 .js"app/javascript/packs"并从application.js.

无论哪种情况,仍然会出现错误。

cod*_*aks 6

不过,有一个解决方法。你可以:

将函数签名从:

function myFunction() { ... }
Run Code Online (Sandbox Code Playgroud)

到:

window.myFunction = function() { ... }
Run Code Online (Sandbox Code Playgroud)

所以在你的代码中,我们可以像下面这样:-

app/javascript/packs/app-globals.js

window.alerts = function() {
    alert ("TEST");
}
Run Code Online (Sandbox Code Playgroud)

然后将此文件要求到 application.js :-

app/javascript/packs/application.js

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

require("@rails/activestorage").start()
require("channels")
require("jquery")

import $ from 'jquery'
window.jQuery = $;
window.$ = $;


require("packs/app-globals") ## require your file
Run Code Online (Sandbox Code Playgroud)