3

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

4

1 に答える 1

0

私が見る限り、select2 はajaxキーストロークごとに呼び出しを呼び出し、選択ボックスを開きます。query元の質問と同じように(約束して)使用して同じ動作を得ることができます。select2がデータを1回ロードしてから、ローカルで休むことを期待していました(検索し、データが変更されるまでさらに呼び出します)。これはオプションではないようです。結果をローカルにキャッシュするだけかもしれません。より良い答えを歓迎します。

于 2013-09-23T20:28:03.773 に答える