【问题标题】:Unobtrusive jQuery autocomplete in RailsRails 中不显眼的 jQuery 自动完成功能
【发布时间】:2010-10-18 02:38:01
【问题描述】:

我正在使用 Rails,但在 application.js 中使用 jQuery 不显眼地执行我所有的 Javascript。

不幸的是,这使得引用 URL 变得相当困难。例如,如果我想赋予字段自动完成行为,我必须在 application.js 中硬编码自动完成 URL,因为 rails url_for 不可用。

是否可以让application.js 使用erb?我是不是想错了?

【问题讨论】:

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


    【解决方案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() %>
    

    【讨论】:

      【解决方案2】:

      如果您不介意可能无法通过验证器的标记,您可以将 url 添加到表单或表单字段的属性中,然后使用 jQuery 获取该属性。

      看起来 Rails 3.0 可能会通过使用 HTML5 自定义数据属性的 javascript 助手走这条路:DHH @ Railsconf 09

      【讨论】:

        【解决方案3】:

        不要这样做 application.js.erb ,即使涉及缓存,这也不是一个好习惯。使您的自动完成端点(您从中获取数据的 url)与表单的操作 url 相同。在您的 application.js 中,只需将 &amp;ac=1 附加到它并让您的控制器理解它。

        【讨论】:

          【解决方案4】:

          是的,有可能,在当前的 Rails 版本中,只需调用您的文件application.js.erb;在旧版本上,您可以自己滚动或获取 this 之类的内容。

          【讨论】:

          • 酷!这是这里的最佳做法吗?你用这个方法吗?对我来说这听起来不错,但我仍然很紧张,因为我正在违背常规。
          • AFAIK,它进入了 Rails,因为很多人都是自己做的。这是一种非常常见的使用模式。一个警告:这是为了注入半静态的东西,比如路线;如果内容要在会话中更改,请改为在 ajax 包装器中发送 javascript。
          • 实际上这似乎不起作用-我必须将文件移出/public/javascripts吗?如果我只是重命名文件,当我的浏览器请求“application.js”时会出现路由错误。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-14
          • 1970-01-01
          • 2023-03-23
          • 1970-01-01
          • 1970-01-01
          • 2015-08-11
          相关资源
          最近更新 更多