我有这个JSON进入typeahead:
[{"q": "#django", "count": 3}, {"q": "#hashtag", "count": 3}, {"q": "#hashtags", "count": 0}, {"q": "#google", "count": 1}]
我的文件代码使用typeahead
var hashTags = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('q'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: '/hashtag.json?q=%QUERY',
remote: {
url: '/hashtag.json?q=%QUERY',
wildcard: '%QUERY'
}
});
$('.search-tag-query').typeahead({
hint:true,
highlight: true,
// autoselect: true,
minLength:1,
limit: 10,
},
{
name: 'hashTags',
display: 'q',
// displayKey: 'count',
source: hashTags.ttAdapter(),
templates: {
empty: 'No results...'
}
});
我轻松地向我的html下拉菜单提示我从" q"获得的数据。或者"计数"。
问题在于我无法发送它们,正如您在代码中看到的那样。
如何发送两者,以便显示标签和与其相关的帖子数量?
感谢。
答案 0 :(得分:1)
使用自定义模板
suggestion: function(data) {
return '<p><strong>' + data.q+ '</strong> – ' + data.count+ '</p>';
}
答案 1 :(得分:1)
您可以使用 <%= select_tag "user_ids",
options_from_collection_for_select(User.all, "id", "name", @project.user),
{ :multiple => true, :size =>10}
%>
和Bloodhound
连接$.map()
处返回的数组。
然后,您可以在传递给Array.prototype.concat()
的{{1}}对象的suggestion
属性中过滤建议。在stacksnippets中,templates
和.typeahead()
属性都会附加到HTML,作为q
或count
值的每次匹配的建议。
q
&#13;
count
&#13;
$(function() {
var data = [{"q": "#django", "count": 3}, {"q": "#hashtag", "count": 3}, {"q": "#hashtags", "count": 0}, {"q": "#google", "count": 1}];
var suggestions = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
local: $.map(data, function(d) {
return {
value: d.q,
suggest: d
}
})
// here we concatenate the two arrays
.concat($.map(data, function(d) {
return {
value: d.count,
suggest: d
}
}))
});
suggestions.initialize();
$(".bs-example .typeahead").typeahead({
minLength: 1,
hint: true,
highlight: true
}, {
name: "suggestions",
displayKey: "value",
templates: {
suggestion: function(data) {
console.log(data);
var details = "<div class=resultContainer>"
+ data.value
+ "<br>"
+ (data.suggest.count == data.value
? data.suggest.q
: data.suggest.count)
+ "</div>";
return details
}
},
source: suggestions.ttAdapter()
});
})
&#13;
答案 2 :(得分:0)
感谢所有人,现在我了解它是如何工作的,特别是对Madalin Ivascu。我改进了我的代码,它通过这种方式工作:
$.ajax({
url: 'wallets',
data: 'myAnyParameterIfNeeded=parameterValue',
success : function(response) {
var results = JSON.parse(response);
// here you can use for loop for iterating into *results*
var rowOneName = JSON.stringify(results[0]['name']);
}
error : function(e){
alert('HTTP error number=' + e.status);
}
})