Реализация виртуализации в Kendo DropdownList с использованием Vue - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь реализовать виртуализацию в раскрывающемся списке, используя Vue.js и Kendo-UI. Я успешно внедрил виртуализацию, но мне трудно понять важность ValueMapper. Это означает, что параметры Dropdown правильно загружаются в DropdownList, когда пользователь выполняет прокрутку вниз, но проблема возникает, когда пользователь делает какой-либо выбор в раскрывающемся списке.

Когда пользователь выбирает любое значение из выпадающего списка, я вижу эту ошибку в консоли:

ValueMapper не предоставляется во время установки значения

Я прочитал документы и пришел к выводу, что реализация преобразователя значений требуется только тогда, когда требуется предварительно выбрать опцию раскрывающегося списка (подробное объяснение см. this ).

Но я получаю вышеупомянутую ошибку, даже когда я выбираю выпадающий вариант, который уже был загружен. Должно быть что-то, чего я не понял в valuemappers.

Кроме того, я использую опрятный ORM в бэкэнде, который не поддерживает IQueryable, и поэтому я написал собственный SQL для получения выгружаемых данных.

Вот мой код Vue:

<template>
  <div v-show="visibility=='true'">
    <label v-html="label">{{label}}</label>

    <kendo-datasource
      ref="remoteDatasource"
      :transport-read-url="getRequestUrl"
      transport-read-type="GET"
      transport-read-data-type="JSON"
      page-size="20"
      schema-data="Data"
      schema-total="Total"
      server-paging="true"
    ></kendo-datasource>

    <kendo-dropdownlist
      ref="dropdownlist"
      v-model="cntrlValue"
      height="130"
      virtual-item-height="26"
      :virtual-value-mapper="valueMapper"
      data-source-ref="remoteDatasource"
      data-text-field="dropdownText"
      data-value-field="dropdownValue"
      option-label="Select here..."
      @close="onSelect"
    ></kendo-dropdownlist>
  </div>
</template>

<script scoped>
import service from "somepath";
export default {
  name: "FormGroupSelect",
  props: {
    id: {
      default: "kendo-Dropdown",
      type: String
    },
    name: {
      type: String
    },
    label: String,
    visibility: String,
    dropdownKey: String
  },
  data() {
    return {
      cntrlValue: this.value
    };
  },
  watch: {
    value: function(newVal) {
      this.cntrlValue = newVal;
    }
  },
  methods: {
    onSelect: function() {
      this.$emit("Select", this.cntrlValue);
    },
    getRequestUrl: function() {
      return service.getDropdownOptionsRequestUrl(this.dropdownKey);
    }
  }
};
</script>

Итак, я должен реализовать отображение значений, даже если я не хочу, чтобы мой пользователь мог выбрать значение, которое еще не было загружено в раскрывающемся списке? И если да, то каков наилучший способ реализовать это, не обременяя сервер, прочитав все возможные значения и затем выполнив поиск индексов (потому что именно так это делается в примере с документами).

1 Ответ

0 голосов
/ 22 января 2019

В вашем случае ошибка наблюдается, потому что вы изначально устанавливаете значение при использовании v-модели.Тем не менее, как описано в документации Kendo здесь - 'Начиная с выпуска Kendo UI R3 2016, реализация функции valueMapper является необязательной.Требуется только в том случае, если виджет содержит начальное значение или если используется метод значения. '

Если вы не устанавливаете начальное значение, компонент работает нормально даже без valueMapper, как это можно увидеть здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...