【问题标题】:How expose javascript variable with Rails 6?如何使用 Rails 6 公开 javascript 变量?
【发布时间】:2020-06-16 12:36:58
【问题描述】:
我在 javascipt/pack 中有一个 home.js 文件
var hello = "hello"
window.hello2 = "hello"
但是,在加载关联的视图 (home.html.erb) 后,在我的导航器的 javascript 控制台中,我会得到 Uncaught ReferenceError: hello is not defined 或 undefined
【问题讨论】:
标签:
javascript
ruby-on-rails
webpack
ruby-on-rails-6
webpacker
【解决方案1】:
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 代码将在每个控制器/视图中运行(不仅仅是在Home 控制器中。)
如果您在 app/views/home/index.html.erb 中包含 <%= javascript_pack_tag 'home' %>,那么您的 JS 代码将仅在 home#index 操作中运行 - 但它会触发刷新。