Как сделать так, чтобы опция уже была выбрана при открытии виджета Select2 4.0.1?

В настоящее время у меня есть работающий виджет, который принимает несколько вариантов. Виджет находится внутри всплывающего окна с кнопкой «Сохранить» вместе с другими кнопками. Когда я нажимаю «Сохранить», всплывающее окно закрывается, выборки сохраняются в базе данных, автоматически выполняется запрос из базы данных и отображаются результаты в DataView.

Теперь, когда я снова открываю всплывающее окно, текстовое поле в виджете Select2 пусто. Я хотел бы, чтобы он извлекал данные из базы данных и отображал их в виджете при его открытии. Я настроил его так, чтобы он возвращал массив строк, который должен быть идентификатором (это все, что мне нужно, чтобы виджет извлек правильные данные).

Итак, мой вопрос: как мне изменить виджет, чтобы он мог принимать массив и отображать их как уже выбранные параметры при создании виджета?

На самом деле я не слишком уверен, что в этом случае будет показывать мой код, но на всякий случай вот они:

$("#select2").select2({
  placeholder: "Select materials...",
  closeOnSelect: false,
  ajax: {
    url: this.targetUrl,
    delay: 200,
    dataType: 'json',
    data: function(params) {
      return {
        code: params.term ? params.term + "*" : "*",
        page: params.page || 1
      };
    },
    processResults: function(data, params) {
      params.page = params.page || 1;
      var results = [];
      for (var i = 0; i < (data.length >= 25 ? 25 : data.length); i++) {
        results.push({
          id: data[i].code,
          text: data[i].code
        });
      }
      return {
        itemCode: results,
        results: results,
        pagination: false
      };
    },
    cache: true
  },
  maximumSelectionLength: 5,
  escapeMarkup: function(markup) {
    return markup;
  }
});

person sparkhee93    schedule 03.03.2016    source источник
comment
Есть ли шанс, что вы это исправили?? Если нет, я постараюсь вам помочь   -  person Rajshekar Reddy    schedule 06.03.2016
comment
@Reddy Нет, я не смог заставить его работать ... ваша помощь будет очень признательна!   -  person sparkhee93    schedule 07.03.2016
comment
I would like for it to fetch the data that's in the database and display them in the widget when it opens вы хотите сделать это со второго открытия всплывающего окна?? что, если при первом открытии всплывающего окна ничего не было сделано? И какие данные вы хотите показать во всплывающем окне во второй раз, что отличается от первого раза?   -  person Rajshekar Reddy    schedule 07.03.2016
comment
@Reddy Я бы хотел, чтобы всплывающее окно содержало выбранные мной параметры. Так что, пока он не обновляется, не только во второй раз, но и в любое время после этого. И если ничего не добавлено/изменено, у меня так, что кнопка Сохранить отключена, поэтому я думаю, что во второй раз ничего не изменилось.   -  person sparkhee93    schedule 07.03.2016
comment
Итак, вы говорите, что просто хотите сохранить состояние всплывающего окна, верно??   -  person Rajshekar Reddy    schedule 07.03.2016
comment
Ага. И поскольку он уже хранится в виде массива, я подумал, что, возможно, я могу каким-то образом изменить виджет, чтобы он принимал массив, чтобы были выбраны эти параметры.   -  person sparkhee93    schedule 07.03.2016
comment
вы создаете всплывающее окно снова и снова для каждого шоу?? или вы просто делаете модальное скрытие и показ?   -  person Rajshekar Reddy    schedule 07.03.2016
comment
Давайте продолжим обсуждение в чате.   -  person sparkhee93    schedule 07.03.2016


Ответы (1)


Select2 будет запускать несколько разных событий, когда с использованием компонента выполняются разные действия, что позволяет вам добавлять пользовательские хуки и выполнять действия. например: событие «изменить», запускается всякий раз, когда параметр выбран или удален.

так что вы можете использовать

$("#select2").val($selected).trigger("change");

после вашего кода в вашем вопросе для программного управления вашим select2.

выше $selected — это данные, которые вы запрашиваете с вашей стороны. Это должен быть массив, например ["12", "23", "34"].

Надеюсь помочь вам.

Ссылка на select2

person tank0317    schedule 11.09.2016