select2 バージョン 3.5.1 を 4.0 にアップグレード中です。委任にはクエリメソッドを使用する必要がありました。
2つの特定の問題が発生します
- minimumInputLength が有効になっていない
- ユーザーが検索ボックスにフォーカスすると、過去の結果が Searching.. で表示されます。最初の項目です。(空の結果を割り当てると問題は解決しますが、結果が見つかりませんというメッセージが表示されます)
以下の私のコードスニペットを参照してください。
var self = this, $view = $(view);
$.fn.select2.amd.require(['select2/data/array', 'select2/utils', 'select2/data/minimumInputLength'], function (ArrayData, Utils, MinimumInputLength) {
function CustomData($element, options) {
CustomData.__super__.constructor.call(this, $element, options);
this.options = options;
}
Utils.Extend(CustomData, ArrayData);
CustomData.prototype.query = function (params, callback) {
//callback({ results: [] });
self.searchText(params.term);
q(ko.unwrap(self.qPromise)).then(function () {
var select2data = $.map(ko.unwrap(self.dataSource), function (obj) {
obj.id = obj.id || obj.Id + obj.KeyDoc;
obj.text = obj.text || obj.Headline;
return obj;
});
callback({ results: select2data });
});
}
// Decorate after the adapter is built
Utils.Decorate(CustomData, MinimumInputLength);
$view.select2({
dataAdapter: CustomData,
multiple: ko.unwrap(self.multiple),
templateResult: ko.unwrap(self.formatFunc),
escapeMarkup: function (markup) { return markup; },
dropdownParent: $('.' + ko.unwrap(self.containerClass)),
placeholder: ko.unwrap(self.placeHolderCaption),
minimumInputLength: 1,
allowClear: true
});
});
提案リスト (キャッシュなし、保存なし) に新しいオプションを割り当てるたびに、回避策を提案してください。
ありがとうございます