Метод select2 ('data') был вызван для элемента, который не использует Select2 - PullRequest
3 голосов
/ 12 января 2020

Я получаю Метод select2 ('data') был вызван для элемента, который не использует Select2 при переносе select с 3.5 на 4.0.12. Как я проверяю, метод initselection в docs был удален и вместо него Мне нужно использовать 1004 * метод требования выбора_1005 * адаптера.

Вот мой код

 var dataUrl;
  dataUrl = $(this).data('url');
  placeholder = $(this).data('placeholder');
  $.fn.select2.amd.require([
    'select2/data/array',
    'select2/utils'
  ], function (ArrayData, Utils) {
    function CustomData ($element, options) {
        CustomData.__super__.constructor.call(this, $element, options);
    }

    Utils.Extend(CustomData, ArrayData);

    CustomData.prototype.current = function (callback) {
        var data = [];
        var list =  this.$element.data('users');
        if(list) {
          return callback(list);
        } else {
          return {};
        }
        // var currentVal = this.$element.val();

        // if (!this.$element.prop('multiple')) {
        //     currentVal = [currentVal];
        // }

        // for (var v = 0; v < currentVal.length; v++) {
        //     data.push({
        //         id: currentVal[v],
        //         text: currentVal[v]
        //     });
        // }

        callback(data);
    };

  return $('#id').select2({
    multiple: true,
    placeholder: placeholder,
    quietMillis: 500,
    minimumInputLength: 3,
    dataAdapter: CustomData,
    // initSelection: function(element, callback) {
    //   var list =  element.data('users');
    //   if(list) {
    //     return callback(list);
    //   } else {
    //     return {};
    //   }
    // },
    ajax: {
      url: dataUrl,
      dataType: "json",
      global: false,
      data: function(term, page) {
        return {
          term: term
        };
      },
      results: function(data, page) {
        return {
          results: data.items
        };
      }
    },
    formatResult: function(data) {
      if(data.parent === true){
        return '<strong>' + data.name + '</strong>';  
      }else{
        return '&nbsp;&nbsp;'+ data.name;  
      }
    },
    formatSelection: function(data) {
      return data.name;
    }
  }).select2('val', []);

})

...