select2: custom matcher - поиск по массиву данных - PullRequest
0 голосов
/ 25 апреля 2018

Я борюсь с select2 .

Учитывая этот пример данных json:

{"id":1,"text":"search term category","data":[{"Key":"catalog","Value":"search term catalog"},{"Key":"make","Value":"search term make"},{"Key":"model","Value":"search term model"}]}

Как я могу искать не только текст "Поле ", но все " значение " поля в массиве данных ?

Я читал о настраиваемом сопоставлении , но не смог его получитьна работу, и я не смог найти пример, с которым я мог бы работать.

Надеюсь, вы можете помочь мне или предоставить мне образец.

Спасибо.

РЕДАКТИРОВАТЬ: Fiddle: jsfiddle

1 Ответ

0 голосов
/ 26 апреля 2018

Вам необходимо написать пользовательское сопоставление, примеры приведены в файле select2 docs . Я изменил предоставленный им пример, чтобы он мог работать для вас.

function matchCustom(params, data) {
    // If there are no search terms, return all of the data
    if ($.trim(params.term) === '') {
      return data;
    }

    // `params.term` should be the term that is used for searching
    // `data.text` is the text that is displayed for the data object
    if (data.text.indexOf(params.term) > -1) {
      return data;
    }

    // checking if a value matches (my addition to their example)
    if (data.data.some(({Value}) => Value.includes(params.text)) {
      return data;
    }

    // Return `null` if the term should not be displayed
    return null;
}

$(".js-example-matcher").select2({
  matcher: matchCustom
});

Возможно, вам придется изменить мои дополнения, чтобы они соответствовали требованиям совместимости вашего браузера (т. Е. Я использую функции жирной стрелки, деструктуризацию объектов, String.prototype.includes и Array.prototype.some).

...