3

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

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

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

我怎样才能做到这一点?
提前致谢。

4

3 回答 3

8

如果您要传递的变量与请求无关 - 那么只需给它一个 name *.js.erb

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

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

于 2013-07-23T12:05:39.433 回答
2

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

于 2013-07-23T12:03:25.583 回答
1

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

或者,

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

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

然后添加一个额外的 JavaScript 语句来根据调用的控制器启动适当的函数,例如:

  <%= controller_name %>();
于 2014-11-23T16:27:27.743 回答