数据适配器与select2 4出错

时间:2015-11-03 12:36:54

标签: jquery-select2 jquery-select2-4

我试图在我的组合框中使用超过10000个数据,我有这个代码

$.fn.select2.amd.define('select2/data/customAdapter',[
        'select2/data/array',
        'select2/utils'
    ],
    function (ArrayAdapter, Utils) {

        function CustomDataAdapter ($element, options) {
            CustomDataAdapter.__super__.constructor.call(this, $element, options);
        }
        Utils.Extend(CustomDataAdapter, ArrayAdapter);

        CustomDataAdapter.prototype.query = function (params,callback) {
            console.log(params);
           var pageSize,
                    results;
                    pageSize = 20;
                    results  = _.filter(content, function (e) {
                        return (params.term === "" || e.text.toUpperCase().indexOf(params.term.toUpperCase()) >= 0);
                 });
                 console.log(results);
                 callback({
                    results: results.slice((params.page - 1) * pageSize, params.page * pageSize),
                    // retrieve more when user hits bottom
                    more   : results.length >= params.page * pageSize
                });
        };

        return CustomDataAdapter;
    }
);

var customAdapter=$.fn.select2.amd.require('select2/data/customAdapter');
    objCmb.select2({
        allowClear: true, 
        disabled: dis, 
        placeholder: Empty, 
        data: content, 
        formatLoadMore   : 'Loading more...',
        dataAdapter:customAdapter

    });

当我使用select2时出现此错误

TypeError:params.term未定义

... ms.term ==="" || e.text.toUpperCase()。indexOf(params.term.toUpperCase())> = 0)

1 个答案:

答案 0 :(得分:0)

问题在于,当有人关注select2控件时,实际上并不是term,因此params对象为空(例如{})。您可以在this JsFiddle中看到这一点(只是尝试搜索某些内容)。

如果您想摆脱该错误,可以修改自定义query功能以解决此问题:

CustomDataAdapter.prototype.query = function (params, callback) {
    var pageSize, results;
    pageSize = 20;
    results = _.filter(content, function (e) {
        return (params.term == null || params.term === "" || e.text.toUpperCase().indexOf(params.term.toUpperCase()) >= 0);
             // ^^^^^^^^^^^^^^^^^^^
    });
    callback({
        results: results.slice((params.page - 1) * pageSize, params.page * pageSize),
        more: results.length >= params.page * pageSize
    });
};

这将按你所期望的那样工作(modified fiddle)。

我还要注意,您的代码示例不包含带有项目的select种群,因此上述小提琴中也不存在这些内容。