在Rails中不显眼的jQuery自动完成

时间:2009-04-07 16:04:42

标签: jquery ruby-on-rails unobtrusive-javascript

我正在使用rails,但在application.js中使用jQuery不引人注意地执行我的所有Javascript。

不幸的是,这使得引用URL非常困难。例如,如果我想提供字段自动填充行为,我必须在application.js中对自动填充网址进行硬编码,因为导轨url_for不可用。

是否可以让application.js使用erb?我是否以错误的方式思考这个问题?

4 个答案:

答案 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() %>