Select2: расширить сопоставитель для данных тега

Я использую Select2 для тегирования. Это работает как шарм, но у меня есть дополнительное требование: Сопоставитель должен соответствовать не только тексту элементов.

Позволь мне объяснить. Функция matcher принимает два параметра: term и text. Это позволяет нам сравнивать заданные теги и введенный текст. Но если я определяю дополнительные данные для каждого тега (через функцию tags), я не могу получить к ним доступ в сопоставителе.

Пример кода:

// #myinput is a hidden input field
$('#myinput').select2({
  matcher: function(term, text) {
      return text.toUpperCase().indexOf(term.toUpperCase()) >= 0;
  },
  tags: function() {
      var tags = [];
      $('#myselect').find('option').each(function(index, option) {
          option = $(option);
          tags.push({
              id: option.val(),
              text: option.text(),
              category: option.data('category')
          });
      });
      return tags;
  }
})

Я установил обязательные свойства id и text для каждого тега. Кроме того, есть строка с именем category. Я хочу сопоставить текст и категорию, а не только текст.

Это возможно?


person Alp    schedule 10.02.2013    source источник


Ответы (2)


в настоящее время это невозможно (начиная с версии 3.3), отправьте запрос на улучшение с помощью jsfiddle в средстве отслеживания проблем select2 на github.

person igor.vaynberg    schedule 11.02.2013
comment
это должно быть так же просто, как передать весь объект данных тега вместо data.text сопоставителю (возможно, в качестве дополнительного параметра для обеспечения обратной совместимости) - person Alp; 11.02.2013

Использование 3.4.2, еще не реализовано. но на самом деле есть довольно простой хак.

найти в select2.(min).js строку, где сопоставитель вызывается с 2 аргументами ("e.matcher(");

в моей версии у меня что-то вроде этого:

{var a=this.text!==b,c=a?this.text:this;(""===f||e.matcher(f,c) 

добавить «это» к третьему аргументу

e.matcher(f,c,this);

в результате будет передан весь объект тега :)

person user3801025    schedule 03.07.2014