我正在使用rails,但在application.js
中使用jQuery不引人注意地执行我的所有Javascript。
不幸的是,这使得引用URL非常困难。例如,如果我想提供字段自动填充行为,我必须在application.js
中对自动填充网址进行硬编码,因为导轨url_for
不可用。
是否可以让application.js
使用erb?我是否以错误的方式思考这个问题?
答案 0 :(得分:6)
如果你不介意可能没有通过验证器的标记,你可以在表单或表单字段上的属性中添加url,然后使用jQuery获取该属性。
看起来Rails 3.0可能会使用HTML5自定义数据属性的javascript帮助程序沿着这条路线走下去:DHH @ Railsconf 09
答案 1 :(得分:2)
是的,可以在当前的rails版本上调用您的文件application.js.erb
;在旧版本中,您可以自己滚动或抓取类似this的内容。
答案 2 :(得分:2)
不要做application.js.erb
,即使涉及缓存,这也不是一个好习惯。使您自动完成端点(您从中获取数据的网址)与您的表单的操作网址相同。在application.js
中,只需将&ac=1
附加到{{1}}并让您的控制器了解它。
答案 3 :(得分:1)
您不必对其进行硬编码 - 只需创建一个JS函数即可添加自动完成侦听器,并接受自动完成的参数,并从模板中调用该JS函数:
(为清晰起见,代码已简化)
的application.js:
function add_autocomplete(id, url) {
$("#" + id).autocomplete(
source: url
);
};
application_helper.rb:
def add_autocomplete(id, url)
render :text => "<script> add_autocomplete('#{id}', '#{url}');</script>"
end
ERb模板:
<input id="i_want_autocomplete" />
<%= add_autocomplete("i_want_autocomplete", items_js_path() %>