【问题标题】:how to write different id for typeahead如何为 typeahead 编写不同的 id
【发布时间】:2018-05-04 15:08:39
【问题描述】:

我正在使用 rails 和 elasticsearch 和 typeahead。

我有三个输入:公司、职位和导航(同时搜索公司和职位)。

我知道如何实现其中一个,但在遵循 DRY 时不知道如何实现所有这些。自动补全、控制器和js文件的路由应该如何设计?

这是适用于其中的代码。

var numbers = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.whitespace,
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  remote: {
    url: "autocomplete?search=%QUERY",
    wildcard: "%QUERY"
  }
});

// initialize the bloodhound suggestion engine
numbers.initialize();

$("#nav_search").typeahead({
  items: 6,
  source:numbers.ttAdapter()
});
$("#company_search").typeahead({
  items: 6,
  source:numbers.ttAdapter()
});
$("#position_search").typeahead({
  items: 6,
  source:numbers.ttAdapter()
});

【问题讨论】:

标签: ruby-on-rails elasticsearch autocomplete typeahead.js


【解决方案1】:

我重写

$("#nav_search").typeahead({
  items: 6,
  source:numbers.ttAdapter()
});
$("#company_search").typeahead({
  items: 6,
  source:numbers.ttAdapter()
});
$("#position_search").typeahead({
  items: 6,
  source:numbers.ttAdapter()
});

var array = ["#nav_search", "#company_search", "#position_search"]
for (i = 0; i < array.length; i++) {
    $(array[i]).typehead({
        items: 6,
        souce: numbers.ttAdapter()
    });
}

如果我没记错的话,这里包括AJAX。所以他们正在向您的后端 url /autocomplete 发出 GET 请求

  remote: {
    url: "autocomplete?search=%QUERY",
    wildcard: "%QUERY"
  }

您需要检查 Rails routes.rb 文件和 rake routes 的输出,因为请求 get /autocomplete 将由特定的控制器#action 处理。你需要从rails routing了解这一点

在 url /autocomplete 的 get 请求正在传递以下输入参数

search = %QUERY

因此您的控制器操作将能够使用这些参数。

parameters[:search]

它会响应提供带有 json 的自动完成功能。

如果您想获得更多帮助,我们需要更多信息

【讨论】:

  • 这样,如何区分这三个输入呢?例如,当我为公司写一些东西作为输入时,我希望能唤起像 autocomplete/company?search=%QUERY 这样的调用,所以控制器会知道我只需要公司的自动完成而不是其他部分。
  • [更新] 这样,如何区分这三个输入呢?例如1。当我写一些东西作为公司的输入时,我希望控制器只返回与公司相关的信息,而不是其他信息。例2。当我写一些东西作为导航的输入时,我希望控制器会知道我需要自动完成各种信息。我想我需要在 url 中指定一个部分,比如 autocomplete?type=%type?search=%QUERY,这样控制器就可以知道根据类型返回哪个值,我只需要 /autocomplete 的路由,但我不需要不知道如何在 ajax 部分做到这一点。
  • @makeapp 你是说你想向后端传递一个额外的参数?是的,这可能不是最好的代码解决方案,但它会起作用。它们将位于后端的 params 哈希中。唯一的事情..我对您用于构建此的库没有明确的了解
  • 我正在使用 typeahead.js、rails4 和 searchkick(用于弹性搜索)。
猜你喜欢
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 2016-02-18
  • 2022-07-20
相关资源
最近更新 更多