【问题标题】:select2: load asynchronous data through promiseselect2:通过promise加载异步数据
【发布时间】: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,它似乎只允许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` 确实接受一个函数。但它不能很好地处理远程数据,因为数据是延迟接收的(异步),下拉菜单不会填充新数据。我必须关闭并再次打开下拉菜单。这对用户来说并不直观。

【问题讨论】:

    标签: javascript angularjs jquery-select2 promise


    【解决方案1】:

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

    【讨论】:

    • 如何通过查询(promise)获取?
    猜你喜欢
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 2014-09-01
    • 2020-06-05
    • 2017-01-15
    • 1970-01-01
    • 2021-02-15
    • 2021-01-03
    相关资源
    最近更新 更多