загрузочная этикетка и ошибка отображения идентификатора

У меня есть сложный объект jason, содержащий имя, фамилию, среднее имя, имя FH и идентификатор агента. Я использую bootstrap-typehead для вызова ajax для получения результатов. Пользователь может ввести имя, фамилию или идентификатор агента. Я хотел бы показать все вышеперечисленные поля в виде ярлыков и идентификатор агента в качестве идентификатора. Я получаю неопределенную ошибку.

ДЕМО

 $('#selectAgent').typeahead({
source: function (query, process) {
    objects = [];
    map = {};
    var data = [{"AgentID": 3456,"FName": "Gary", "LName": "Means","MName": "K","FHName": "GaryFH Name"}, {"AgentID": 2050,"FName": "Kevin", "LName": "Mortha","MName": "V","FHName": "Keving FH Name"},{"AgentID": 5678,"FName": "Mike", "LName": "Hundt","MName": "","FHName": "Mike FH Name"}] // Or get your JSON dynamically and load it into this variable

    $.each(data, function (i, object) {
        map[object.label] = object;
        objects.push(object.Fname + object.LName );
    });
    console.log(objects);
    process(objects);
},
updater: function (item) {
    $('id').val(map[item].AgentID);
    return item;
}
});

//Журнал консоли

ЖУРНАЛ: undefinedMeans, undefinedMortha, undefinedHundt


person user3067524    schedule 30.12.2013    source источник


Ответы (1)


У меня есть решение вашей проблемы, это чувствительность к регистру. Вы увидите, что ссылаетесь на Fname, а не на FName. На практике лучше избавиться от любых неправильных заглавных букв, подобных этому, это просто упрощает поддержку кода. С точки зрения фильтрации как для AgentId, так и для имен, это немного сложнее, но я думаю, что вы найдете здесь подходящее решение.

Я бы передал всю запись пользователя, хотя это потребовало бы от вас определения сортировки и всех видов, которые уже есть для вас, если это обычные буквенно-цифровые элементы. Попробую заставить его работать, перейдя к прототипу, если я это сделаю, я обновлю.

JSFiddle

Рассматривал передачу вызовов сортировки обратно в библиотеку typeahead, но накладные расходы того не стоят. Надеюсь, вышеизложенного достаточно!

person Lawrence Jones    schedule 30.12.2013
comment
Кажется, я могу работать на себя. Я немного смущен, как это будет работать, когда я использую ajax-вызов на сервер для получения результатов. Могу ли я в любом случае показать имена, начинающиеся с введенной буквы или цифры? вместо совпадения в любом месте имени? - person user3067524; 30.12.2013
comment
я не хочу звонить, пока пользователь не введет не менее 3 символов. - person user3067524; 30.12.2013
comment
Используйте функцию сопоставления для работы с пользовательским выбором. Я обновил скрипку, чтобы она соответствовала только запросам длиной более 3 символов, для других ваших требований вам просто нужно проявить творческий подход в функции сопоставления. Кроме того, ajax должен работать так же, как обычно, я полагаю, вы знаете, как это сделать, из вашего комментария в ОП? - person Lawrence Jones; 30.12.2013
comment
Большое спасибо за Вашу помощь. Я новичок в загрузочной голове. Если вы можете показать мне пример того, как сделать вызов ajax, добавив выбранный идентификатор агента в качестве параметра запроса, я очень признателен. - person user3067524; 30.12.2013
comment
Можете ли вы уточнить, чего вы хотите добиться для меня? Что вы на самом деле хотите сделать со своим агентом? Я изо всех сил пытаюсь понять, что именно вы хотите. - person Lawrence Jones; 30.12.2013
comment
По какой-то причине fiddle не работает. Глядя на typehead API, вы не думаете, что мы можем передать minLength в качестве аргумента. - person user3067524; 30.12.2013
comment
Скрипка у меня работает? Введите «gar», и вы увидите предложение Гэри. Затем, после выбора, нажмите кнопку проверки ввода, и вы получите предупреждение с его идентификатором агента. - person Lawrence Jones; 30.12.2013
comment
Конечно. 1. Поиск по имени, фамилии или идентификатору агента с использованием автозаполнения. 2 При поиске по любому из них отображайте полное имя в поле метки. Когда пользователь нажимает кнопку добавления выбранного агента, выбранный агент отображается только для чтения. Пользователь может искать и добавлять двух агентов. Наконец, при отправке мне нужно отправить эти два идентификатора агента на сервер. Мне придется написать еще одну функцию ajax, которая отправляет сообщения на сервер вместе с агентами. В поисках образца Пожалуйста, посмотрите мой другой пост и посмотрите на скрипку, прикрепленную к нему. stackoverflow.com/questions/20750535/converting-to-typehead. - person user3067524; 30.12.2013
comment
Я попытался снова. Я вижу, что вы добавили новую функцию сопоставления, но когда я набираю gar, я не получаю никаких предложений. - person user3067524; 30.12.2013
comment
Я просто собираюсь отредактировать JSFiddle для поддержки того, что вы только что прокомментировали, хотя это ссылка на скриншот с моего компа. Я пробовал его на Firefox Safari и Chrome, поэтому не должно быть никаких причин, по которым он не работает с вами. - person Lawrence Jones; 30.12.2013
comment
давайте продолжим это обсуждение в чате - person Lawrence Jones; 30.12.2013
comment
Правильно, понял. IE9 не поддерживает поле __proto__, поэтому в функции matching ему нечего будет вызывать. Перепишите соответствующую функцию, чтобы она была вашей собственной пользовательской функцией, и вы обнаружите, что она должна работать. - person Lawrence Jones; 30.12.2013
comment
Я попробую . Спасибо за вашу помощь! - person user3067524; 30.12.2013