如何清除所有内容然后将新项目添加到 JavaScript 中的 Kendo 多选?

How do you clear all and then add new items to a Kendo Multiselect in JavaScript?

我正在拨打 AJAX 电话,我收到的回复如下所示:

[{
  Value: "val1",
  Text: "text1"
}, {
  Value: "val2",
  Text: "text2"
}, {
  Value: "val3",
  Text: "text3"
}, {
  Value: "val4",
  Text: "text4"
}]

我尝试使用此答案中描述的方法添加它:

我修改了代码如下:

var multiSelect = $("#mySelect").data("kendoMultiSelect");

// Read original data content
var multiData = multiSelect.dataSource.data();
for (var i = 0; i < response.length; i++) {
  // insert new element into copy of multiselect data
  multiData.push({
    text: response[i].Text,
    value: response[i].Value
  })
}
// Write back the modified data
multiSelect.dataSource.data(multiData);

但是,以这种方式添加的所有新选项都显示为undefined。我已 console.logresponse 验证其中是否有数据。

我在多选 API 中也找不到任何东西,例如 clear()removeAll。只是一个 remove,要求您在删除之前先获取每个 dataItem。我是否缺少更好的方法?

要清除选项,请使用

multiSelect.dataSource.data([]);

检查下面的演示。

$(document).ready(function() {
            // create MultiSelect from select HTML element
            var required = $("#required").kendoMultiSelect().data("kendoMultiSelect");
          
            $("#btn").click(function() {
              var multiSelect = $("#required").data("kendoMultiSelect");
              var response = [ { Text: "ship 1", Value: "Value1" },{ Text: "ship 2", Value: "Value2" }, { Text: "ship 3", Value: "Value3" },   { Text: "ship 4", Value: "Value4" } ];

              // clear previous data
               multiSelect.dataSource.data([]);
               
              var multiData = []; //multiSelect.dataSource.data();
              for (var i = 0; i < response.length; i++) {
                // insert new element into copy of multiselect data
                multiData.push({
                  text: response[i].Text,
                  value: response[i].Value
                })
              }
              // Write back the modified data
              multiSelect.dataSource.data(multiData);

            });
        });
.demo-section label {
            display: block;
            margin: 15px 0 5px 0;
        }
        #get {
            float: right;
            margin: 25px auto 0;
        }
<!DOCTYPE html>
<html>
<head>
    <base href="https://demos.telerik.com/kendo-ui/multiselect/index">
    <style>html { font-size: 14px; font-family: Arial, Helvetica, sans-serif; }</style>
    <title></title>
    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2018.2.620/styles/kendo.common-material.min.css" />
    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2018.2.620/styles/kendo.material.min.css" />
    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2018.2.620/styles/kendo.material.mobile.min.css" />

    <script src="https://kendo.cdn.telerik.com/2018.2.620/js/jquery.min.js"></script>
    <script src="https://kendo.cdn.telerik.com/2018.2.620/js/kendo.all.min.js"></script>
    

</head>
<body>
<div id="example" role="application">
    <div class="demo-section k-content">
        <h4>Kendo - Multiselect - Append to dataSource</h2>
        <label for="required">Required</label>
        <select id="required" multiple="multiple" data-placeholder="Select attendees...">
            <option>ABC</option>
            <option>XYZ</option>
            <option>PQR</option>
        </select>
        
        <button class="k-button" id="btn">GET Ajax data</button>
    </div>
</div>


</body>
</html>