【发布时间】:2016-02-13 22:44:20
【问题描述】:
我想这样做,以便在我的搜索自动完成链接中显示建议的结果,该链接指向网站上的特定餐厅。
注意:我遇到了这个post,但它使用了一个静态对象数组。与这篇文章不同,我希望从服务器端生成链接。
var links = [{name: "abc", link: "http://www.example1.com"},
{name: "nbc", link: "http://www.example2.com"}];
var source = new Bloodhound({
...
local: links
});
在我的例子中,我从 Rails 查询数据库,所以 name 将是餐厅的名称,link 将是 restaurant_path。根据我当前的代码,我该如何完成?如果需要任何其他代码,请告诉我。
$(function() {
var restaurants = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: "/search/autocomplete?query=%QUERY",
wildcard: "%QUERY"
}
});
restaurants.initialize();
$('#autocomplete').typeahead(null, {
displayKey: 'name',
source: restaurants.ttAdapter()
});
});
我的餐厅路径目前的样子如下:
localhost:3000/restaurants/blue-smoke
更新:
根据 guest271314 的建议,我能够找到我的餐厅对象的返回值,其中包括适当的 slug(即blue-smoke)以链接建议的结果。
【问题讨论】:
-
我认为您不应该将 Bloodhound 与基于服务器的搜索一起使用。无论如何,只需忽略示例的文件部分并让您的服务器返回类似的数据,示例将起作用!
-
@MichalSzyndel 不是重复的,因为该问题涉及静态链接。我正在处理服务器端链接。
-
@CarlEdwards 尝试在
remote在restaurants返回的数组中返回建议,在第二个预输入初始化对象处使用templates属性 -
@MichalSzyndel 有点困惑。如果不使用 Bloodhound,我还会使用什么。至于“忽略文件部分”,您指的是什么?您能否提供进一步详细说明的答案?
-
好吧,让我们回到开头。当我发布到这个网址时会发生什么?
/search/autocomplete?query=%QUERY。 Bloodhound 是一个搜索引擎,因此您只需向其提供所有数据,它就会为您执行搜索,而无需请求服务器。如果您的服务器首先过滤查询,那么您将在前端和后端重复此责任。但是你可以忽略这一点并继续这样做,它只是效率低下。
标签: javascript jquery ruby-on-rails search typeahead.js