我有一个像这样的json:
{"num": ["test", "test group event"]}
我想使用typeahead.js, 但他们的json是这样的:
["Andorra","United Arab Emirates"]
如何在下面的例子中使用我的json?
<script type='text/javascript'>//<![CDATA[
$(window).load(function(){
var countries = new Bloodhound({
datumTokenizer : Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer : Bloodhound.tokenizers.whitespace,
limit : 10,
prefetch : {
url : 'http://127.0.0.1:8000/mysearch/',
filter : function(list) {
return $.map(list, function(country){
return {
name : country
};
});
}
}
});
countries.initialize();
$('#prefetch .typeahead').typeahead(null, {
name : 'countries',
displayKey : 'name',
source : countries.ttAdapter()
});
});//]]>
</script>
更新
我的json来自服务器(http://rroyales.webfactional.com/mysearch/1.json),所以如果可能,我认为我们必须使用预取来从服务器获取json。我不想使用getjson在变量中捕获它,或者是否有更简单的方法在变量中捕获它?
更新2:
what is wrong with my json coming from haystack - 创建了一个与此相关的新问题
答案 0 :(得分:1)
这就是你的猎犬应该是这样的样子
var dataSource = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('item'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: {
url: "http://jsbin.com/nixalofara/1.json",
filter: function (data) {
return $.map(data['num'], function (item) {
return {
item: item
};
});
}
}
});
并且像这样输入
$('.typeahead').typeahead({
highlight: true
}, {
displayKey: 'item',
source: dataSource.ttAdapter()
});
这是demo
答案 1 :(得分:0)
由于您的数组是较大json对象中的属性,因此我非常确定您可以执行以下操作:
var myJson = {"num": ["one", "two"]}; //capture your json object in a variable
var myArray = myJson.num; //myArray will now equal ["one", "two"]
然后,在您列出的代码底部附近,您需要相应地更新typeahead
电话。