Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用函数中的数据源(动态数据源)-选择2 v4_Javascript_Jquery Select2 - Fatal编程技术网

Javascript 使用函数中的数据源(动态数据源)-选择2 v4

Javascript 使用函数中的数据源(动态数据源)-选择2 v4,javascript,jquery-select2,Javascript,Jquery Select2,在以前的版本中,可以通过以下方式轻松完成: someDynamicData=function(){ //return some data... } $("#lga").select2({ width: '100%', allowClear: false, placeholder: "--- please select ---", data: function () { return {results: someDynamicData, text

在以前的版本中,可以通过以下方式轻松完成:

someDynamicData=function(){
     //return some data...
}

$("#lga").select2({
    width: '100%',
    allowClear: false, placeholder: "--- please select ---",
    data: function () {
        return {results: someDynamicData, text: 'name'};
    }
});

我认为这不适用于新的select2 v4。我如何在新的select2 v4中实现这一点。

对于任何可能像我使用select2 v4一样库存丰富的人。我有个变通办法。请注意,我是一些javascript大师,可能有更好的方法解决这个问题。就目前而言,这是摇摆不定的:

案例研究:我有一个链式选择选项,它共享一个JSON对象列表:这里我只显示主题和级别示例,以保持简单。选择主题时,我将从所选主题的数据源初始化级别数据源

function getDynamicData(){
    return [
       {"code": "ACC", "name": "ACCOUNTING", "levels": [
            {"id": 3, "name": "SS 1", "description": "Senior Secondary School 1", "type": "Standard", "resultTemplates": []},
        ....
        ]}
        ....
    ];
}    

$.fn.select2.amd.require(['select2/data/array', 'select2/utils'],
    function (ArrayData, Utils) {
        function CustomData($element, options) {
            CustomData.__super__.constructor.call(this, $element, options);
        }

        Utils.Extend(CustomData, ArrayData);

        CustomData.prototype.query = function (params, callback) {
            subjects = getDynamicData();
            $.map(subjects, function (d) {//Required only when the object do not have either id/text
                d.id = d.code;
                d.text = d.name;
                return d;
            });
            callback({results: subjects});
        };

        $("#subjects").select2({
            width: '100%',
            dataAdapter: CustomData
        });
    }
);
但后来我意识到我在重复很多事情,所以它就是这样

参考文献 我希望这将有助于其他人

//Added this function to a javascript file on my template (shared across pages)
function initMySelect2(myQuery, mySelector, props) {
    $.fn.select2.amd.require(['select2/data/array', 'select2/utils'],
        function (ArrayData, Utils) {
            function CustomData($element, options) {
                CustomData.__super__.constructor.call(this, $element, options);
            }

            Utils.Extend(CustomData, ArrayData);
            CustomData.prototype.query = myQuery;//Pass the query function as a parameter
            $(mySelector).select2(props(CustomData));//Initialise the select2 with the custom data
        }
    );
}

//Used this to initialize select2
initMySelect2(function (params, callback) {
        callback({results: getDynamicData()});
    },
    "#subjects",
    function (myCustomData) {
        return {
            width: '100%',
            placeholder: '---please select subjects ---',
            dataAdapter: myCustomData
        };
    }
);