【发布时间】:2013-09-24 04:28:03
【问题描述】:
异步加载 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 });
})
};
编辑
查看source,它似乎只允许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` 确实接受一个函数。但它不能很好地处理远程数据,因为数据是延迟接收的(异步),下拉菜单不会填充新数据。我必须关闭并再次打开下拉菜单。这对用户来说并不直观。
【问题讨论】:
标签: javascript angularjs jquery-select2 promise