我很难正确配置和设置自己的JS文件,这些JS文件包含用于特定任务的JS函数。
我浏览了一些文章,发现我需要将我的自定义JS放在JS文件夹-> app/javascript/packs/currency_calculations.js中。
currency_calculations.js
function convert_curr(from, to) {
...
}
function show_convertion(curr) {
...
}
...然后我尝试将这个自定义JS文件添加到app/javascript/packs/application.js中
import Rails from "@rails/ujs";
import "@hotwired/turbo-rails";
import * as ActiveStorage from "@rails/activestorage";
import "channels";
import "controllers";
Rails.start();
ActiveStorage.start();
import "stylesheets/application";
// my custom JS file
import "packs/currency_calculations" // I also tried import "currency_calculations" -- same result我还试图在application.html.erb文件中添加以下内容:
= javascript_pack_tag 'currency_calculations'这也没用。
我仍然收到这个错误:
Uncaught Error: Cannot find module 'currency_calculations'当试图从视图调用函数时,则:
Uncaught ReferenceError: convert_curr is not defined什么是正确的方法来连接这个?我在Rails 5中被用来将我的所有JS函数放到一个js文件中,而这个文件仅仅是为了像这样添加到一个app/assets/javascripts/application.js中:
//= require currency_calculations然后,在视图中,我可以像convert_curr("a", "b")一样简单地调用想要的JS函数。
提前谢谢你。
发布于 2021-05-01 15:37:34
在Rails 6中有几种方法可以做到这一点。
第一种方法是创建一个自定义目录,并在application.js文件中要求它。在本例中,您可以创建如下所示的目录:
app/javascript/custom/currency_calculations.js然后,您需要在您的application.js文件中这样要求它:
// app/javascript/packs/application.js
// ...
require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
require("custom/currency_calculations")如果您将自定义文件夹命名为"currency“,然后将.js文件命名为index.js,则同样的方法也可以被简化。
然后你就可以这样称呼它:
require("currency")默认情况下,Require将在文件夹中查找索引文件。但在这种情况下,必须存在一个索引文件,否则它将失败。
如果您不希望JS与其他所有内容一起编译,则另一种方法是使用javascript_pack_tag。
在这种情况下,将js文件添加到app/javascript/packs目录中。然后在需要它的地方使用pack标记助手,例如:
<%= javascript_pack_tag 'currency_converter' %>我最不想提的是..。您确定不需要其他库来使其工作(如JQuery)吗?在这种情况下,您需要在调用要执行的js文件之前安装该库并将其导入application.js。
https://stackoverflow.com/questions/67346357
复制相似问题