主要解决搜索过的关键词就不用ajax去后端取数据了,用已存数据展示即可,相当于把数据记录记忆了,减少后端的压力。
var parent = $("#parentid"), dataCaches = Array(), timeEr = null;
$.fn.select2.amd.define('select2/data/customAdapter', [
'select2/data/array',
'select2/utils'
],
function (ArrayAdapter, Utils) {
function CustomDataAdapter($element, options) {
CustomDataAdapter.__super__.constructor.call(this, $element, options);
}
Utils.Extend(CustomDataAdapter, ArrayAdapter);
CustomDataAdapter.prototype.query = function (q, callback) {
var key = q.term;
if (!key || key.length < 2 || /^[a-zA-Z1-9]+$/.test(key)) {
return false;
}
var dataCache = dataCaches[key];
if (dataCache) {
callback({results: dataCache});
} else {
timeEr && window.clearTimeout(timeEr);
timeEr = window.setTimeout(function () {
$.ajax({
url: '/api/article/get_list',
data: {name: key, puid: puid},
dataType: 'json',
type: 'POST',
success: function (data) {
var _data = [];
if (data.length > 0) {
for (d in data) {
_data.push({
id: data[d].id,
text: data[d].name + "(" + data[d].id + ")"
});
}
}
dataCaches[key] = _data;
callback({results: _data});
}
})
}, 500);
}
};
return CustomDataAdapter;
}
);
var customAdapter = $.fn.select2.amd.require('select2/data/customAdapter');
parent.select2({
language: "zh-CN",
dataAdapter: customAdapter
});