【问题标题】:How to execute custom javascript functions in Rails 6如何在 Rails 6 中执行自定义 JavaScript 函数
【发布时间】:2020-04-08 11:19:32
【问题描述】:

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

我有一个名为 app-globals.js 的文件,其中包含要测试的功能:

function alerts() {
  alert("TEST")
}

然后我想在我的一个视图中使用它:

<% = button_tag 'Button', type: 'button', onClick: 'alerts ()'%>

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

ReferenceError: alerts is not defined

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

  2. 我将 app-globals.js 移至 "app/javascript/packs" 并从 application.js 中删除了 require ("app-globals")。

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

【问题讨论】:

标签: javascript ruby-on-rails webpacker


【解决方案1】:

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

更改函数签名:

function myFunction() { ... }

到:

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

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

app/javascript/packs/app-globals.js

window.alerts = function() {
    alert ("TEST");
}

然后需要这个文件到 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

【讨论】:

  • 这不是正确的做法。这个问题是一个重复,请参阅stackoverflow.com/questions/54501241/… 和我的正确答案。
  • 请注意,此答案的一部分是从先前问题的错误答案中复制/粘贴的。
  • 这不是错误的答案,我已经在我的 Rails 6 项目中实现了相同的功能,并且成功运行。目前我也在使用 Rails 6 应用程序。你可以看到这条评论也许上面所有的作品都有效——Alexander Gorg他也有同样的东西。
  • 这个答案不正确。是的,它有效,但它不是使用新 javascript 包的正确方法。在上面的链接中查看我的正确答案。
  • 这对我有用,但仅适用于一个功能。当我尝试执行多个功能(即 window.showNum() window.showAlph() window.myFunction() )时 - 它完全停止工作。
猜你喜欢
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 2022-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多