如何使用 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 defined
或 undefined
var hello = "Hello"
- 当您在控制台中键入 > hello
时,由于 Javascript 中称为闭包的概念,这将不起作用。我发现 this article 很有帮助。
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
操作中 - 但它会触发刷新。
我在 javascipt/pack 中有一个 home.js 文件
var hello = "hello"
window.hello2 = "hello"
但是,在加载关联的视图 (home.html.erb) 之后,在这些变量的导航器的 javascript 控制台中,我得到 Uncaught ReferenceError: hello is not defined
或 undefined
var hello = "Hello"
- 当您在控制台中键入> hello
时,由于 Javascript 中称为闭包的概念,这将不起作用。我发现 this article 很有帮助。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
操作中 - 但它会触发刷新。