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` は確かに関数を受け入れます。ただし、データが遅延 (非同期) で受信され、ドロップダウンに新しいデータが入力されないため、リモート データではうまく機能しません。ドロップダウンを閉じて再度開く必要があります。これはユーザーにとって直感的ではありません。