2014-02-06 7 views
0

У меня есть поле 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) как бы я это сделал?

ответ

0

Если вы используете ajax, то вы должны tokenize на стороне сервера.

+0

Это действительно дает ответ. Функция токенизатора предназначена для токенизации элементов, когда используются параметры на стороне клиента. Автор вопроса использует параметр ajax, то есть он предоставляет опции через сервер; поскольку такой токенизатор не имеет смысла в этом контексте. –

+0

Другими словами, если у меня нет доступа к серверу, запрашиваемому для того, чтобы отмечать элементы там, я не могу вставить список возможных совпадений в select2? –

+0

вы можете, но не используя встроенный помощник ajax. если вы пишете свою собственную функцию запроса, вы можете токенизировать ввод и выдать запрос ajax на токен на сервер для решения серверного элемента. –

Смежные вопросы