我正在使用 Rails 3.2.12。
我想在我的资产 JavaScript 文件中插入一个 ruby 代码:
function trim(string) {
return string.replace(/(^\s+)|(\s+$)/g, "");
}
function <%= controller_name %>() {
...
}
我怎样才能做到这一点?
提前致谢。
我正在使用 Rails 3.2.12。
我想在我的资产 JavaScript 文件中插入一个 ruby 代码:
function trim(string) {
return string.replace(/(^\s+)|(\s+$)/g, "");
}
function <%= controller_name %>() {
...
}
我怎样才能做到这一点?
提前致谢。
如果您要传递的变量与请求无关 - 那么只需给它一个 name *.js.erb
。
对于特定于请求的数据(例如您的示例中的控制器名称),这是不可能的。Javascript 文件独立于应用程序请求加载,通常由应用程序服务器(apache、nginx)作为静态资产提供。因此,如果您想要一些依赖于请求的自定义脚本,请将其放在您的视图模板 (.html.erb) 中。
此外,您绝对可以通过应用程序将请求代理到您的 js 文件(在 中定义它的路由routes.rb
),但这不会被视为好的代码。
我相信如果您有一个带有扩展名的 javascript 文件.js.erb
or .js.coffee.erb
,所有扩展名都将从右到左解析,因此您的代码应该erb
在解析coffeescript
和最终解析js
部分之前理解其中的一些标签。
我不确定为什么在定义函数时要使用控制器名称,但如果你真的这样做,那么
修改/使用:-link_to -button_to -form_tag -form_for 与remote: true
属性:例如
<%= form_for(@article, remote: true) do |f| %>
查找更多信息:
或者,
您可以为每个控制器静态预定义函数,例如:
function Users(param1, param3...){
....
}
function Friends(param1, param3...){
....
}
function Likes(param1, param3...){
....
}
function Posts(param1, param3...){
....
}
然后添加一个额外的 JavaScript 语句来根据调用的控制器启动适当的函数,例如:
<%= controller_name %>();