При удалении выбранного элемента (с помощью возврата) раскрывающийся список отображает удаленный элемент только в рельсах select2 - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть мультиселектор, выпадающий список select2 в рельсах. В настоящее время, когда я выбираю 2-3 опции из списка и когда я нажимаю клавишу Backspace, выбранный элемент удаляется, и отображается раскрывающийся список со всеми параметрами. Но когда я набираю некоторые инициалы, а затем выбираю из списка, а затем нажимаю клавишу Backspace, выпадающий список заполняет только что удаленную опцию. Есть ли способ, при котором при наборе и выборе, выпадающий список будет отображать полный список после нажатия на клавишу возврата? Я использую код (в соответствии с https://github.com/select2/select2/issues/3354#issuecomment -132389291 ):

$.fn.select2.amd.require(['select2/selection/search'], function (Search) {
  var oldRemoveChoice = Search.prototype.searchRemoveChoice;
  Search.prototype.searchRemoveChoice = function () {
    oldRemoveChoice.apply(this, arguments);
    this.$search.val('');
  };

  $.fn.select2.amd.require(['select2/compat/matcher'], function (oldMatcher) {
    $('#reports_employee_id').select2({
      matcher: oldMatcher(matchStart),
      templateResult: formatSearch,
      templateSelection: formatSelected,
      maximumSelectionLength: 25,
      placeholder: " "
    })
  });
});

Заранее спасибо !!

1 Ответ

0 голосов
/ 17 апреля 2020

Хорошо, я понял проблему в этом. Мне нужно было обработать изменения. Ниже я прилагаю обновленный код для справки.

$.fn.select2.amd.require(['select2/selection/search'], function (Search) {
  var oldRemoveChoice = Search.prototype.searchRemoveChoice;
  Search.prototype.searchRemoveChoice = function () {
    oldRemoveChoice.apply(this, arguments);
    this.$search.val('');
    this.handleSearch();
  };

  $.fn.select2.amd.require(['select2/compat/matcher'], function (oldMatcher) {
    $('#reports_employee_id').select2({
      matcher: oldMatcher(matchStart),
      templateResult: formatSearch,
      templateSelection: formatSelected,
      maximumSelectionLength: 25,
      placeholder: " "
    })
  });
});

Просто нужно добавить эту строку:

this.handleSearch();

, и она работает как положено.

...