Создать вариант Remote Select2 v4 с пользовательскими параметрами - PullRequest
0 голосов
/ 10 декабря 2018

здесь проблема, я могу создать пользовательский параметр, как указано в документации, например:

var option = new Option("my custom option", "myid", true, true);
$('select[name="myselect"]').append(option).trigger('change');

// manually trigger the `select2:select` event
$('select[name="myselect"]').trigger({
    type: 'select2:select',
    params: {
        data: {
            id: "myid",
            text: "my custom option",
            customparam: {
                hello: "I'm here"
            }
        }
    }
});

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

$('select[name="myselect"]').select2('data')[0].customparam

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

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Метод, описанный в работах @ rafaelrglima для меня, но я предпочитаю метод ниже, который был взят из ответа dejan9393 в выпуск Github 2830 :

var dataAdapter = $('select[name="myselect"]').data('select2').dataAdapter;
dataAdapter.addOptions(dataAdapter.convertToOptions([{
     id: "myid",
     text: "mycustomoption",
     customparam: "hello"
}]));

Я предпочитаю этот способпотому что мне не нужно иметь один шаг для добавления «id» и «text» и отдельный шаг для добавления пользовательских параметров.Также convertToOptions принимает массив, поэтому у вас есть удобный способ добавить несколько параметров за один шаг.

0 голосов
/ 11 декабря 2018

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

$('select[name="yourfieldname"]')
  .append(new Option(`${doc.n}`, doc._id, true, true))
  .select2('data')[0].customparam = doc.i;

тогда, когда вам нужно позвонить:

$('select[name="yourfieldname"]').select2('data')[0].customparam
...