rails 4 jquery自动完成文本没有结果

时间:2014-05-10 06:09:34

标签: jquery ruby-on-rails ruby autocomplete

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

enter image description here

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

SuggestionController

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 %>

3 个答案:

答案 0 :(得分:3)

第61行here上的autocomplete-rails-uncompressed.js文件插入了"no existing match"消息:

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"以外的选项。一旦实现,您就可以提交拉取请求,以将新的和改进的逻辑合并到主服务器中。

答案 1 :(得分:0)

https://github.com/bigtunacan/rails-jquery-autocomplete使用宝石的官方版本,您将获得开箱即用的此功能。

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

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

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

jQuery.railsAutocomplete.options.showNoMatches = false;

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

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

答案 2 :(得分:0)

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

self.assertTrue(mock_client.__init__.called)