【发布时间】:2023-03-17 07:01:02
【问题描述】:
对于 Rails 3.1 应用程序,我的一些站点范围的 JavaScript 仅在满足某些实时、特定于实例的条件时才包含。这意味着我不能将它放在新资产管道的 application.js 中,因为 erb 没有为当前上下文中的嵌入式 Ruby 解析它。基本上,我根据登录的 current_user 包括键盘快捷键。
我的问题:这个带有嵌入代码的 JavaScript 应该去哪里,以便仍然使用正确的上下文(即当前登录用户)为每个页面访问解析嵌入的 Ruby?
答案似乎只是把它放在底部的 application.html.erb 布局视图中,但这就像我将 javascript 代码隐藏在一个不直观的位置一样。
我尝试创建一个 application2.js.erb 文件,但随后我收到有关未定义变量的错误,我认为这可能是因为资产引擎仅在缓存输出之前解析此文件一次并且范围不是对 current_user 之类的东西仍然正确。
所以,使用 application.html.erb 在这里工作得很好,这不是如何让它正常工作的问题。相反,我想知道是否有更优雅的方法可以将资产管道模型与我的需求结合起来,并且仍然将我的大部分 JavaScript 保留在 assets/javascripts 目录中。
【问题讨论】:
-
你永远不需要用 JavaScript 来混淆 Ruby 代码
-
@fl00r:不知道你是什么意思。我的非常具体的例子说明了为什么有理由将 Ruby 混合到你的 JavaScript 中(即只有某些用户应该包含 JavaScript 块)。同样,我的 JavaScript 可以包含动态位,例如当前用户的名称,例如
-
你总是可以用不显眼的 js 做同样的工作
-
fl00r:这里并不适用。根据用户的权限级别,我在服务器端排除某些事情。如果您有具体的代码示例,您想建议提供更多详细信息,我很乐意在此处的单独答案中看到这一点。
标签: javascript ruby-on-rails ruby-on-rails-3.1 erb asset-pipeline