2014-02-06 1 views
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) 어떻게하면 좋을까요?

답변

0

아약스를 사용하는 경우 서버 측에서 토큰 화해야합니다.

+0

실제로 답변을 제공합니다. tokenizer 함수는 클라이언트 측 옵션이 사용될 때 항목을 토큰 화하기위한 것입니다. 저자는 ajax 옵션을 사용하고 있습니다. 즉, 서버 사이드를 통해 옵션을 제공하고 있습니다. 그러한 맥락에서 토크 나이 저는 의미가 없습니다. –

+0

즉, 항목을 토큰 화하기 위해 쿼리되는 서버에 대한 액세스 권한이없는 경우 가능한 일치 목록을 select2에 붙여 넣을 수 없습니까? –

+0

내장 된 ajax 헬퍼를 사용할 수는 있지만 그렇게 할 수는 없습니다. 독자적인 쿼리 함수를 작성하면 입력을 토큰 화하고 토큰 당 ajax 요청을 서버에 발행하여 서버 측 항목을 확인할 수 있습니다. –

관련 문제