Select2 начальное значение не работает

Я использую Select2 4.0.2 для страниц CRUD. Однако, когда я пытаюсь заполнить / инициализировать selectbox в edit страница, это не работает по какой-то причине. Почему это не работает? Вот пример того, что у меня сейчас есть, оно должно быть заполнено адресом электронной почты test@gmail.com. https://gyazo.com/92a89f5462c36a8c26f4dcd365fb1fb9

Должно быть что-то вроде этого, но я не получаю его на работу: https://gyazo.com/194fa8b11a61736039a5acda763065ae

<script>
        token = '{{csrf_token()}}';
        $("#mainuser").select2({
            ajax: {
                dataType: "json",
                type: "POST",
                data: function (params) {
                    return {
                        term: params.term,
                        '_token': token,
                        isnew: 'false',
                        partner_id: {{$partner->id}}
                    };
                },
                url: '/partners/getusers',
                cache: false,
                processResults: function (data) {
                    return {
                        results: data
                    };
                }
            },
            "language": {
                "noResults": function () {
                    return "Geen gebruikers gevonden.<br> <a href='/klanten/nieuw' class='btn btn-danger'>Maak nieuwe klant</a>";
                }
            },

            escapeMarkup: function (markup) {
                return markup;
            }
        });
        $("#mainuser").select2('data', {id: 1, text: 'test@gmail.com'});

        // $("#mainuser").select2({...}).select2('data', {...}); doesn't work either...

</script>

Сейчас у меня есть поле выбора, заполняемое AJAX, как и ожидалось, но не заполняемое (как это должно быть в edit страница). Он должен быть уже заполнен `.select2('data', {id:... text: ...}); часть, но оно не заполняется этим значением, как вы можете видеть на видео, оно все еще пустое. Я прочитал эту статью, но она не работает.

1 ответ

Решение

Нашел решение:

<script>
        token = '{{csrf_token()}}';
        var select = $('#mainuser');
        select.select2({
            ajax: {
                dataType: "json",
                type: "POST",
                data: function (params) {
                    return {
                        term: params.term,
                        '_token': token,
                        isnew: 'false',
                        partner_id: {{$partner->id}}
                    };
                },
                url: '/partners/getusers',
                cache: true,
                processResults: function (data) {
                    return {
                        results: data
                    };
                }
            },
            "language": {
                "noResults": function () {
                    return "Geen gebruikers gevonden.<br> <a href='/klanten/nieuw' class='btn btn-danger'>Maak nieuwe klant</a>";
                }
            },

            escapeMarkup: function (markup) {
                return markup;
            }
        });

        var $option = $('<option selected>Loading...</option>').val(1);
        select.append($option).trigger('change'); // append the option and update Select2

        $.ajax({ // make the request for the selected data object
            type: 'POST',
            url: '/partners/getmainuser',
            dataType: 'json',
            data : { '_token': token, 'isnew' : 'false'},
            headers:
            {
                'X-CSRF-Token': '{{csrf_token()}}'
            }
        }).then(function (data) {
            // Here we should have the data object
            $option.text(data.text).val(data.id); // update the text that is displayed (and maybe even the value)
            $option.removeData(); // remove any caching data that might be associated
            select.trigger('change'); // notify JavaScript components of possible changes
        });


</script>

В некотором роде, к сожалению, они должны инициализироваться с помощью совершенно другого вызова AJAX, но это, казалось, было единственным вариантом.

Другие вопросы по тегам