Больше данных с программно созданной опцией - PullRequest
2 голосов
/ 24 октября 2019

Я использую Select2 v4. У меня есть объект, и мне нравится получать все данные этого объекта. Когда я выбираю опцию и использую $ (_ id) .select2 ('data') [0]), он возвращает все данные выбранного объекта.

Но в случае редактирования, когда я добавляю опциюпрограммно

     var option = new Option(this.device.serial, this.device.id.toString(), true, true);
     this.objRef.append(option).trigger('change');

и снова выберите созданную опцию, он просто возвращает id и текст объекта, а не все данные. Если я использую пользовательский адаптер данных, он возвращает все данные:

    CustomDataAdapter.prototype.updateOptions = function (data) {          
      let myData: any[] = [data];
      this.$element.find('option').remove();
      this.addOptions(this.convertToOptions(myData));
    }

Но я не люблю использовать пользовательский адаптер. Есть ли способ преобразовать объект в параметр, аналогичный адаптеру данных, чтобы при следующем выборе он снова содержал все данные?

А вот определение select2. Данные загружаются раньше, и я использую ajax только для разбивки на страницы и поиска:

  var $ddResult = $(_id).select2({
  placeholder: '',
  selectOnClose: _selectOnClose,
  tags: _tags,
  allowClear: _allowClear,
  minimumResultsForSearch: 5,
  ajax: {
    transport: function (params, success, failure) {
      let pageSize = 30;
      let term = (params.data.term || '').toLowerCase();
      let page = (params.data.page || 1);

      if (timer)
        clearTimeout(timer);

      timer = setTimeout(function () {
        timer = null;
        let results = _data
          .filter(function (f) {
            return f.text.toLowerCase().includes(term);
          });
        let paged = results.slice((page - 1) * pageSize, page * pageSize);
        let options = {
          results: paged,
          pagination: {
            more: results.length >= page * pageSize
          }
        };
        success(options);
      }, params.delay);
    }
  },     
})
...