javascript - 使用Vue在Kendo DropdownList中实现虚拟化

标签 javascript vue.js kendo-ui

我正在尝试使用 Vue.js 和 Kendo-UI 在下拉列表中实现虚拟化。我已经成功实现了虚拟化,但我很难理解 ValueMapper 的重要性。这意味着当用户向下滚动时,Dropdown 选项可以正确加载到 DropdownList 中,但是当用户在 Dropdown 列表中进行任何选择时就会出现问题。

当用户从下拉列表中选择任何值时,我在控制台中看到以下错误:

ValueMapper is not provided while the value is being set

我已阅读文档并得出结论,仅当需要预获取下拉选项时才需要实现值映射器(有关详细说明,请参阅 this)。

但即使我选择已加载的下拉选项,我也会收到上述错误。关于 valuemappers 肯定有一些我不理解的地方。

此外,我在后端使用不支持 IQueryable 的 dapper ORM,因此我编写了自定义 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>

那么,即使我不想让用户选择尚未在下拉列表中加载的值,我是否也应该实现值映射器?如果是这样,通过读取所有可能的值然后搜索索引来实现它而不会给服务器带来负担的最佳方法是什么(因为这就是文档示例中的完成方式)。

最佳答案

在您的情况下,会观察到错误,因为您在使用 v-model 时最初设置了一个值。然而,正如 Kendo 文档 here 中所描述的那样- '从 Kendo UI R3 2016 版本开始,valueMapper 函数的实现是可选的。仅当小部件包含初始值或使用 value 方法时才需要它。'

如果您没有设置初始值,即使没有 valueMapper,组件也可以正常工作,如所示 here .

关于javascript - 使用Vue在Kendo DropdownList中实现虚拟化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54292143/

相关文章:

javascript - 使用removeChild() jquery一次删除两个项目

javascript - 通过初始化该属性,确保该属性是 react 性的,无论是在数据选项中,还是对于基于类的组件

vue.js - 如何在 quasar vue 组件环境中使用 require ('electron' )?

javascript - 页面刷新后如何获取父组件到子组件的最新数据

Javascript 无法使用 clearInterval 停止计时器 onclick

javascript - 使用数组构造函数创建的嵌套数组 - 引用问题

javascript - TypeScript 中奇怪的联合类型行为

javascript - 复选框事件未使用 jquery 触发

kendo-ui - 如何右对齐剑道网格数字字段列标题?

grid - Kendo UI Grid 多次触发 CRUD 操作