Создание элемента, если оно еще не существует, в поле выбора Selectize.js и ajax обновить новый добавленный элемент

Я использовал Selectize.js в поле выбора. Что мне нужно, если элемент отсутствует в списке параметров, мне нужно будет добавить новый пункт. Когда новый элемент добавлен, я хочу иметь ajax-вызов для обновления недавно добавленного элемента в моей базе данных.

В своем документировании говорится, что мы можем использовать "create", чтобы иметь возможность выбирать элемент.

create - Позволяет пользователю создавать новые элементы, которые не входят в список параметров. Этот параметр может быть любым из следующих: "true" (поведение по умолчанию), "false" (отключено) или функция, которая принимает два аргумента: "enter" и "обратный вызов". Обратный вызов должен быть вызван с окончательными данными для параметра.

Но я не могу понять, как использовать обратный звонок здесь. может ли кто-нибудь помочь?

Ниже приведен пример моего содержимого, значения - идентификаторы элементов в db. Я хотел бы, чтобы новый элемент был добавлен в db и возвращался со значением id из db и заполнялся и выбирался в поле выбора.

<select name="fruits" id="fruits" placeholder="Select a fruit" >
    <option value="1">Apple</option>
    <option value="2">Orange</option>
    <option value="3">Mango</option>
    <option value="4">Grape</option>
</select>

<script>
    $(function(){
        $('#fruits').selectize({
            create:function (input, callback){

           }
        });
    });
</script>

Ответы

Ответ 1

На самом деле вы должны вернуть объект со свойствами, которые соответствуют именам ваших опций labelField и valueField:

<script>
    $(function(){
        $('#fruits').selectize({
            create:function (input){
               return { value:123, text:input};
           }
        });
    });
</script>

Если вам нужно выполнить удаленную операцию, вы бы закодировали ее так:

<script>
    $(function(){
        $('#fruits').selectize({
            create:function (input, callback){
                $.ajax({
                    url: '/remote-url/',
                    type: 'GET',
                    success: function (result) {
                        if (result) {
                            callback({ value: result.id, text: input });
                        }
                    }
                });
            }
        });
    });
</script>

Ответ 2

Вы должны вызвать обратный вызов, передавая свои значения:

$('#fruits').selectize({
    create:function (input, callback){
        callback({
            value: 123, // probably your ID created or something
            text: input
        });
    }
});

Ответ 3

Thanks a lot, @Corgalore. Its working for me like
$(function(){
        $('#desig').selectize({
            create:function (input, callback){
                $.ajax({
                    url: "<?php  echo $this->url(null, array('controller' => 'employee-detail', 'action' => 'add-new-desig-ajax'));?>",
                    type: 'POST',
                    data:{'designation':input},
                    success: function (result) {
                        if (result) {
//                            console.log('sdfasf',result);
                            callback({ value: result.id, text: input });
                        }
                    }
                });
            }
        });
    });