使用 select2 4 的数据适配器出错
Error with Data Adapter with select2 4
我试图在我的组合框中使用超过 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 时出现这个错误
类型错误:params.term 未定义
...ms.term === "" || e.text.toUpperCase().indexOf(params.term.toUpperCase()) >= 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
带有项目的人口,因此它也不存在于上述小提琴中。
我试图在我的组合框中使用超过 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 时出现这个错误
类型错误:params.term 未定义
...ms.term === "" || e.text.toUpperCase().indexOf(params.term.toUpperCase()) >= 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
带有项目的人口,因此它也不存在于上述小提琴中。