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 });
                })
        };

编辑

查看源代码,看起来它只允许ajaxlocal用于查询数据。如果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

据我所知, select2ajax为每个击键调用一个调用,并打开选择框。我可以使用query(with promise) 获得与原始问题相同的行为。我期待 select2 加载数据一次,然后在本地休息(搜索,并进一步调用直到任何数据更改)。看起来这不是一个选择。我可能只是在本地缓存我的结果。欢迎更好的回答。

于 2013-09-23T20:28:03.773 回答