jQuery part:
У меня есть jQuery UI 1.8 Форма автозаполнения, которая выбирает удаленные данные JSON из контроллера Rails.
$('input#test').autocomplete({
source: function( request, response ) {
$.getJSON(
"<%= find_stuff_url(:format => :json) %>",
request,
function(data){
console.log(data);
function(data) {
$.map(data, function(item) {
return {
"label" : item.control_point.label,
"value" : item.control_point.geonames_uri
}
});
});
},
minLength: 2,
select: function( event, ui ) {
// ...
}
});
… что я получаю:
Этот контроллер Rails просто возвращает массив Objects
(фактически ActiveRecord
экземпляров), сериализованный в JSON.Я хотел бы использовать эти данные для заполнения списка автозаполнения.Сейчас я получаю массив сериализованных объектов ActiveRecord - например, один из этих объектов может быть:
Object
control_point: Object
geonames_uri: "http://sws.geonames.org/5128581/"
label: "New York (US)"
lat: "40.7142691"
lng: "-74.0059729"
map_id: 1
name: "New York City"
Что мне нужно:
Однако, jQuery Autocomplete , вероятно, хочет, чтобы массив JSON содержал объекты id
и label
для заполнения списка, но у меня их нет.Это то, что написано в документации :
Ответный обратный вызов, который ожидает, что один аргумент будет содержать данные, предлагаемые пользователю.Эти данные […] могут быть в любом из описанных выше форматов для простых локальных данных (String-Array или Object-Array с меткой / значением / обоими свойствами).
Я не совсем понимаючто подразумевается под свойствами "String-Array или Object-Array with label / value / both".
В этом примере мой вывод был бы списком этих control_point
объектов, показанных как:
label: "New York (US)", value: <the geonames_uri>
label: "New York (Somewhere else)", value: <another geonames_uri>
…
Я пытался адаптировать код из документации, используя $.map
, нопохоже, что он не работает (т.е. автозаполнение ничего не показывает).
Как передать произвольный объект JSON в jQuery Autocomplete, чтобы он отображал список результатов?Более конкретно: что я должен вставить в function(data){}
?