У меня есть поле Select2, которое использует вызов Ajax для извлечения данных из удаленного источника. Я хотел бы иметь возможность вставить список в поле для соответствия результатам.Как использовать токенизатор Select2 с результатами Ajax?
Я попробовал следующий метод: tokenizer
tokenizer: function (input, selection, callback) {
var parts,
part,
matched = [],
i,
j;
// replace whitespace with commas
input = input.replace(/[\s]+/g, ',');
// no comma no need to tokenize
if (input.indexOf(',') < 0) {
return;
}
parts = input.split(/[\,]+/g);
for (i = 0; i < parts.length; i += 1) {
part = parts[i];
part = part.trim();
// check for duplicates
if (matched.indexOf(part) > -1) {
continue;
}
// check if the part matches
for (j = 0; j < tagList.length; j += 1) {
if (part === tagList[j].id) {
matched.push(part);
callback({id: part, text: part});
break;
}
}
}
}
со следующим методом результатов Ajax:
// yes, the results are being returned properly
results: function (data) {
var results = [],
len = data.length,
i;
for (i = 0; i < len; i += 1) {
if (data[i].extra && data[i].extra.isp_id) {
results.push({text: data[i].name, id: data[i].value, ispId: data[i].extra.isp_id, ispName: data[i].extra.isp_name});
} else {
results.push({text: data[i].name, id: data[i].value});
}
}
tagList = results; // obviously, tagList is declared in a scope accessible to the tokenizer method
return {results: results};
}
Как вы можете ожидать, tagList
пуст. Я просто не знаю, как запустить метод tokenizer
против данных результата. (1) Возможно ли это? И если да, (2) как бы я это сделал?
Это действительно дает ответ. Функция токенизатора предназначена для токенизации элементов, когда используются параметры на стороне клиента. Автор вопроса использует параметр ajax, то есть он предоставляет опции через сервер; поскольку такой токенизатор не имеет смысла в этом контексте. –
Другими словами, если у меня нет доступа к серверу, запрашиваемому для того, чтобы отмечать элементы там, я не могу вставить список возможных совпадений в select2? –
вы можете, но не используя встроенный помощник ajax. если вы пишете свою собственную функцию запроса, вы можете токенизировать ввод и выдать запрос ajax на токен на сервер для решения серверного элемента. –