如何使用 Rails 6 公开 javascript 变量?

How expose javascript variable with Rails 6?

我在 javascipt/pack 中有一个 home.js 文件


var hello = "hello"
window.hello2 = "hello"


但是,在加载关联的视图 (home.html.erb) 之后,在这些变量的导航器的 javascript 控制台中,我得到 Uncaught ReferenceError: hello is not definedundefined

  1. var hello = "Hello" - 当您在控制台中键入 > hello 时,由于 Javascript 中称为闭包的概念,这将不起作用。我发现 this article 很有帮助。

  2. window.hello2 = "Hello" -> 您正在分配一个全局变量。当您在控制台中键入 > window.hello2 时,它会给出输出,但只有 > hello2 不起作用,它会给出 ReferenceError.

    • window.hello2 可用于所有 JS 代码,它是全局的。
    • 但是不建议使用全局变量,在各自的函数中使用vars。

此外,您没有提到您如何使用 pack/home.js 文件。

如果您在 app/views/layouts/application.html.erb 中包含 <%= javascript_pack_tag 'home' %>,那么您的 JS 代码将 运行 在每个 controller/view 中(而不仅仅是在 Home 控制器中。)

如果您在 app/views/home/index.html.erb 中包含 <%= javascript_pack_tag 'home' %>,那么您的 JS 代码将 运行 仅在 home#index 操作中 - 但它会触发刷新。