我使用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
还有一些其他方法,比如直接更改数组的数据(只有一个数据副本),但都不能正常工作。
答案 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
};
}
}
});
我希望这个例子可以帮助您解决问题