【问题标题】:Rails 3.1 insert ruby code in JavaScript fileRails 3.1 在 JavaScript 文件中插入 ruby​​ 代码
【发布时间】:2013-07-23 11:58:32
【问题描述】:

我使用的是 Rails 3.2.12。
我想在我的资产 JavaScript 文件中插入一个 ruby​​ 代码:

function trim(string) {
  return string.replace(/(^\s+)|(\s+$)/g, "");
}

function <%= controller_name %>() {
...    
}

我该怎么做?
提前致谢。

【问题讨论】:

  • 您不能直接在 javascript 文件中插入 ruby​​ 代码。你需要通过ajax传递一些参数。
  • 我认为您应该重新设计解决方案以将数据作为变量传递:)

标签: javascript ruby-on-rails asset-pipeline


【解决方案1】:

如果您要传递的变量与请求无关 - 那么只需将其命名为 *.js.erb

对于特定于请求的数据(例如您示例中的控制器名称),这是不可能的。 Javascript 文件独立于应用程序请求加载,通常由应用程序服务器(apache、nginx)作为静态资产提供。因此,如果您想要一些依赖于请求的自定义脚本,请将其放在您的视图模板 (.html.erb) 中。

您也绝对可以通过应用程序将请求代理到您的 js 文件(在 routes.rb 中定义它的路由),但这不会被视为好的代码。

【讨论】:

    【解决方案2】:

    我相信如果你有一个扩展名为 .js.erb.js.coffee.erb 的 javascript 文件,所有扩展名都会从右到左解析,因此你的代码应该在解析 @ 之前理解其中的一些 erb 标签987654324@ 和最终的 js 部分。

    【讨论】:

      【解决方案3】:

      我不确定为什么在定义函数时要使用控制器名称,但如果你真的这样做了,那么

      或者,

      您可以为每个控制器静态预定义函数,例如:

        function Users(param1, param3...){
          ....   
        }
        function Friends(param1, param3...){
          ....   
        }
        function Likes(param1, param3...){
          ....   
        }
        function Posts(param1, param3...){
          ....   
        }
      

      然后添加一条额外的 JavaScript 语句以根据正在调用的控制器启动适当的功能,例如:

        <%= controller_name %>();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-28
        相关资源
        最近更新 更多