Rails 中不显眼的 jQuery 自动完成
我正在使用 Rails,但在 application.js
中使用 jQuery 不引人注意地执行所有 Javascript。
不幸的是,这使得引用 URL 变得非常困难。 例如,如果我想提供字段自动完成行为,我必须在 application.js
中对自动完成 URL 进行硬编码,因为 Rails url_for
不可用。
是否可以让 application.js
使用 erb? 我是否以错误的方式思考这个问题?
I'm using rails, but doing all my Javascript unobtrusively using jQuery in application.js
.
Unfortunately, this makes it quite difficult to reference URLs. For example, if I want to give a field autocomplete behavior, I have to hard-code the autocomplete URL in application.js
since the rails url_for
isn't available.
Is it possible to make application.js
use erb? Am I thinking about this the wrong way?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您不介意可能无法通过验证器的标记,您可以将 url 添加到表单或表单字段上的属性,然后使用 jQuery 获取该属性。
看起来 Rails 3.0 可能会通过使用 HTML5 自定义数据属性的 javascript 帮助程序沿着这条路线走下去: DHH @ Railsconf 09
You could add the url to an attribute on the form or form field, if you don't mind markup that may not pass the validator, and then fetch that attribute with jQuery.
It looks like Rails 3.0 might be going down this route with the javascript helpers using HTML5 custom data attributes: DHH @ Railsconf 09
是的,这是可能的,在当前的 Rails 版本上只需调用您的文件
application.js.erb
; 在旧版本上,您可以自己推出或获取类似 this 的内容。Yes, it's possible, on current rails versions just call your file
application.js.erb
; on older versions you can either roll your own or grab something like this.不要执行
application.js.erb
,即使涉及缓存,这也不是一个好的做法。 让您的自动完成端点(从中获取数据的 URL)与表单的操作 URL 相同。 在您的application.js
中,只需将&ac=1
附加到它并让您的控制器理解它。Don't do
application.js.erb
, that's not a good practice even if caching is involved. Make you autocomplete endpoint (url from which you are getting the data) the same as your form's action url. In yourapplication.js
just append&ac=1
to it and make your controllers understand it.您不必对其进行硬编码 - 只需创建一个 JS 函数来添加自动完成侦听器,并接受自动完成参数,然后从模板中调用该 JS 函数:
(为了清晰起见,简化了代码)
application.js:
application_helper.rb:
ERb 模板:
You don't have to hardcode it-- just create a single JS function that adds the autocomplete listener, and accepts parameters for the autocomplete, and call that JS function from your template:
(code simplified for clarity)
application.js:
application_helper.rb:
ERb template: