如何将 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,则应在服务器侧tokenize。

最新更新