我试图在我的组合框中使用超过10000个数据,我有这个代码
$.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 (params,callback) {
console.log(params);
var pageSize,
results;
pageSize = 20;
results = _.filter(content, function (e) {
return (params.term === "" || e.text.toUpperCase().indexOf(params.term.toUpperCase()) >= 0);
});
console.log(results);
callback({
results: results.slice((params.page - 1) * pageSize, params.page * pageSize),
// retrieve more when user hits bottom
more : results.length >= params.page * pageSize
});
};
return CustomDataAdapter;
}
);
var customAdapter=$.fn.select2.amd.require('select2/data/customAdapter');
objCmb.select2({
allowClear: true,
disabled: dis,
placeholder: Empty,
data: content,
formatLoadMore : 'Loading more...',
dataAdapter:customAdapter
});
当我使用select2时出现此错误
TypeError:params.term未定义
... ms.term ==="" || e.text.toUpperCase()。indexOf(params.term.toUpperCase())> = 0)
答案 0 :(得分:0)
问题在于,当有人关注select2控件时,实际上并不是term
,因此params
对象为空(例如{}
)。您可以在this JsFiddle中看到这一点(只是尝试搜索某些内容)。
如果您想摆脱该错误,可以修改自定义query
功能以解决此问题:
CustomDataAdapter.prototype.query = function (params, callback) {
var pageSize, results;
pageSize = 20;
results = _.filter(content, function (e) {
return (params.term == null || params.term === "" || e.text.toUpperCase().indexOf(params.term.toUpperCase()) >= 0);
// ^^^^^^^^^^^^^^^^^^^
});
callback({
results: results.slice((params.page - 1) * pageSize, params.page * pageSize),
more: results.length >= params.page * pageSize
});
};
这将按你所期望的那样工作(modified fiddle)。
我还要注意,您的代码示例不包含带有项目的select
种群,因此上述小提琴中也不存在这些内容。