如何在init,Select2之后重置数据

时间:2015-04-29 02:48:31

标签: javascript jquery jquery-select2

我使用Select2-4.0.0我一直在努力解决这个问题一整天来更新数据。

我搜索我喜欢的每个帖子Update select2 data without rebuilding the control,但没有一个可以使用。

我需要的是非常简单的(数据的设定者):

我有一个diaglog,它有一个选择。每次打开diaglog时,我都会ajax一个数据来保存在本地数组中,如:

打开对话框时:

    var select2List=syncToLoadTheData();//data for select2
    $('#search-user-select').select2({  //here when secondly executed, the select2's data on UI does not refreshed 
        data:select2List,
        matcher: function(params, data){
            var key = params.term;
            if ($.trim(key) === '') {
                return data;
            }
            if( (matchKeyAndPinyin(key,data.text))){
                return data;
            }
            return null;
        }
    }

但问题是即使列表正在改变,选择选项根本不会改变。请注意,在我的测试用例中,每次打开对话框时,服务器的数据都会改变:

我曾尝试过: 1.初始时:

  data: function() { return {results: select2List}; }// not work to show any data at all

2.当第二次打开对话框时:

  $( "#search-user-select").select2('data',newdata,true);//not work to have the new data

3.第二次打开时:

   $("#search-user-select").select2("updateResults");//Error, does not have this method

还有一些其他方法,比如直接更改数组的数据(只有一个数据副本),但都不能正常工作。

1 个答案:

答案 0 :(得分:0)

之前我遇到过同样的问题,我的问题是我需要在每次ajax请求后用新数据更新select2。

以及我如何修复我的代码。

         EventId = $(this).attr('id');


           $.ajax({
            url: 'AjaxGetAllEventPerons',
            type: 'POST',
            dataType: 'json',
            data: {id: EventId},
        })
        .done(function(data) {


                $("#select2_job").select2({
                minimumInputLength: 2,
                multiple:true,

                initSelection : function (element, callback) {
                //var data = data;



                callback(data);
                },

                ajax: {
                url: "/AjaxGetAllPersonForEvent",
                dataType: 'json',
                quietMillis: 100,
                data: function (term) {
                    return {
                        term: term
                    };
                },
                results: function (data) {
                    var myResults = [];
                    $.each(data, function (index, item) {
                        myResults.push({
                            'id': item.id,
                            'text': item.fullname
                        });
                    });
                    return {
                        results: myResults
                    };
                }
                }
                });

我希望这个例子可以帮助您解决问题