【问题标题】:rails 4 jquery autocomplete text for no resultsrails 4 jquery自动完成文本没有结果
【发布时间】:2014-05-10 06:09:33
【问题描述】:

我安装了rails-4-jquery-autocomplete gem。我在用户选择他们的学校的注册页面(由设计完成)上使用它。我目前遇到的问题是我想在找不到学校时显示文本,例如“我的学校未列出”。目前,默认情况下显示“没有现有匹配”的文本,我想更改该文本。

查看 gem 的文档,我看不到在没有找到结果时设置文本的方法。如果找不到任何结果,有没有办法覆盖 gem 并返回不同的字符串?或者,我需要修改 jquery 调用吗?

建议控制器

class SuggestionsController < ApplicationController
  autocomplete :school, :name, :full => true
end

查看

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <div>
    <%= f.label :school_id %>
    <%= f.autocomplete_field :school_name, autocomplete_school_name_suggestions_path %>
  </div>

<% end %>

【问题讨论】:

  • 添加所有相关代码
  • @Dave,我错了,视图代码现在已经添加进去了。
  • 我了解到您的问题已经得到解答,但是 gem 的官方/新版本已经发布,并且积极维护。 github.com/bigtunacan/rails-jquery-autocomplete
  • @theStig 只是重申亨特史蒂文斯所说的话。官方维护的 gem 支持您现在正在寻找的开箱即用的功能。

标签: jquery ruby-on-rails ruby autocomplete


【解决方案1】:

"no existing match" 消息由 autocomplete-rails-uncompressed.js 文件在第 61 行插入here

if(arguments[0].length == 0) {
  arguments[0] = []
  arguments[0][0] = { id: "", label: "no existing match" }
}

看起来该字符串是硬编码的,因此您无法在不付出额外努力的情况下自定义空消息。

一个简单的解决方案是删除该行

//= require autocomplete-rails

从您的application.js 文件中复制autocomplete-rails-uncompressed.js 文件并将其粘贴到您的javascripts 文件夹中,并将"no existing match" 字符串更改为您喜欢的短语。这种方法的缺点是,如果将来要更新此 gem,则由您来更新修改后的 javascript 文件。

更好和更复杂的解决方案是分叉 gem 并更改 javascript 逻辑以接受 "no existing match" 以外的选项。一旦实现,您就可以提交一个拉取请求,将您的新的和改进的逻辑合并到主控中。

【讨论】:

    【解决方案2】:

    如果您只需要为一个输入字段禁用不匹配消息,您可以将数据属性添加到特定字段:

    <%= f.autocomplete_field :school_name, autocomplete_school_name_suggestions_path, 'data-show-no-matches' => false %>
    

    【讨论】:

      【解决方案3】:

      使用https://github.com/bigtunacan/rails-jquery-autocomplete 的正式版 gem,您将立即获得对该功能的支持。

      您只需将文本设置为所需的值,如下所示。

      jQuery.railsAutocomplete.options.noMatchesLabel = "New Text Value Here";
      

      或者,如果您不想显示消息,您可以完全禁用它。

      jQuery.railsAutocomplete.options.showNoMatches = false;
      

      以下内容可以添加到 application.js 文件的底部;或(更好)作为 assets/javascripts 中的单独 .js 文件,然后该文件需要在引用 rails-jquery-autocomplete 的指令之后作为指令添加到 application.js 文件。

      $(document).ready(function(){
          jQuery.railsAutocomplete.options.noMatchesLabel = "New Text Value Here";
      })
      

      【讨论】:

      • 您是否知道实际设置文本的位置:在应用程序 .js 文件中还是在其他位置?非常感谢任何建议
      • @BKSpureon 我在上面添加了一些额外的细节。
      猜你喜欢
      • 1970-01-01
      • 2013-12-01
      • 2015-04-22
      • 2011-01-04
      • 1970-01-01
      • 2018-04-16
      • 2010-10-25
      • 1970-01-01
      相关资源
      最近更新 更多