0
Ajax 호출을 사용하여 원격 소스에서 데이터를 검색하는 Select2 필드가 있습니다. 결과를 일치시키기 위해 필드에 목록을 붙여 넣을 수 있기를 원합니다. 다음 아약스 결과 방법Ajax 결과와 함께 Select2의 토크 나이저는 어떻게 사용합니까?
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;
}
}
}
}
:
나는 다음과 같은 tokenizer
방법을 시도
// 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) 어떻게하면 좋을까요?
실제로 답변을 제공합니다. tokenizer 함수는 클라이언트 측 옵션이 사용될 때 항목을 토큰 화하기위한 것입니다. 저자는 ajax 옵션을 사용하고 있습니다. 즉, 서버 사이드를 통해 옵션을 제공하고 있습니다. 그러한 맥락에서 토크 나이 저는 의미가 없습니다. –
즉, 항목을 토큰 화하기 위해 쿼리되는 서버에 대한 액세스 권한이없는 경우 가능한 일치 목록을 select2에 붙여 넣을 수 없습니까? –
내장 된 ajax 헬퍼를 사용할 수는 있지만 그렇게 할 수는 없습니다. 독자적인 쿼리 함수를 작성하면 입력을 토큰 화하고 토큰 당 ajax 요청을 서버에 발행하여 서버 측 항목을 확인할 수 있습니다. –