2015-11-03 3 views
1

Я пытаюсь использовать более 10000 ДАННЫЕ в моем поле со списком, и у меня есть этот кодОшибка с адаптером данных с Выбор2 4

$.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 

    }); 

, когда я использую ВЫБ.2 эта ошибка появляется

TypeError: Params. не определено

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

ответ

0

Проблема не в том, что, когда кто-то фокусирует контроль ВЫБ.2, там нет действительно 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 с элементами, поэтому его также нет в приведенных выше скриптах.

+0

спасибо, что это работает – Mauricio

Смежные вопросы