异步加载 select2 选项的最佳位置是什么。我想要与 相同的设施ajax
,但不是 select2 发送 ajax 请求,而是需要从 promise 对象异步加载值。下面的代码有效,我在其中加载数据query
,但这意味着每次击键,调用选择下拉菜单,它都会查询数据。那么,正确的配置是什么?
代码:
var items2 = [
{
"Id": 1,
"Name": "First"
},
{
"Id": 2,
"Name": "Second"
},
{
"Id": 3,
"Name": "Third"
}
];
var names = function () {
var deferred = $q.defer();
$timeout(function () {
deferred.resolve(items2);
}, 200);
return deferred.promise;
};
var query: function (query) {
var results = [];
names().then(function(d){
$.each(d, function(index, item){
results.push({
id: item.Id,
text: item.Name
});
});
query.callback({ results: results });
})
};
编辑
查看源代码,看起来它只允许ajax
或local
用于查询数据。如果local
采用返回数据的函数,那将是理想的。我在正确的轨道上吗?有没有简单的方法来修补它?
谢谢
// exports
window.Select2 = {
query: {
ajax: ajax,
local: local,
tags: tags
}, util: {
debounce: debounce,
markMatch: markMatch,
escapeMarkup: defaultEscapeMarkup,
stripDiacritics: stripDiacritics
}, "class": {
"abstract": AbstractSelect2,
"single": SingleSelect2,
"multi": MultiSelect2
}
};
编辑2:
'local' 确实接受了一个函数。但它不能很好地处理远程数据,因为数据是延迟接收的(异步),下拉菜单不会填充新数据。我必须关闭并再次打开下拉菜单。这对用户来说并不直观。