首页 > 解决方案 > 如何从 kendoListBox 中删除所有项目

问题描述

我有两个剑道列表框,它们在它们之间交换项目。基本上是一个可用的项目和一个选定的项目对。我有 Json 服务,它通过 Json 数组控制哪些项目可用。
当用户选择一个新过滤器时,我希望两个 Kendo 列表框在从服务器添加新项目之前清除项目。
目前它将新列表从服务器附加到当前列表。

$(document).ready(function () {
    $("#filterKeyWord").click(function () {
        getResults($("#keywords"));
    });
    $("#availableReports").kendoListBox({
        dataTextField: "Name",
        dataValueField: "ID",
        connectWith: "selectedReports",
        dropSources: ["availableReports"],
        toolbar: {
            tools: ["transferTo", "transferFrom", "transferAllTo", "transferAllFrom", "remove"]
        }
    });

    $("#selectedReports").kendoListBox({
        dataTextField: "Name",
        dataValueField: "ID",
        dropSources: ["selectedReports"],
        remove: function (e) {
            setSelected(e, false);
        },
        add: function (e) {
            setSelected(e, true);
        }
    });

    var mydata = { ReportName: "", UserId: "" };
    mydata.ReportName = "SomeName";
    mydata.UserId = "SomeUser";

    var crudService = "",
        dataSource = new kendo.data.DataSource({
            serverFiltering: true,
            transport: {
                read: {
                    url: crudService + "GetReportList",
                    dataType: "json",
                    type: "get",
                    contentType: "application/json; charset=utf-8",
                },
                update: {
                    url: crudService + "SaveReportList2",
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    type: "post",
                },
                filter: {
                    url: crudService + "GetReportList",
                    dataType: "json",
                    type: "get",
                    contentType: "application/json; charset=utf-8",
                },

                parameterMap: function (options, operation) {
                    console.log(operation);
                    if (operation !== "read" && options.models) {
                        return JSON.stringify({ models: options.models });
                    }
                    if (operation === "read") {
                        return "request=" + JSON.stringify(mydata);
                    }
                }
            },
            batch: true,
            requestStart: function () {
                kendo.ui.progress($(".demo-section"), true);
                console.log("request start");
            },
            requestEnd: function () {
                kendo.ui.progress($(".demo-section"), false);
                console.log("request end");
            },
            error: function (e) {
                console.log("Error" + e);
            },
            change: function (e) {
                console.log("change" + this.data.length);
                setDropDownBoxes(this);
            },
            schema: {
                model: {
                    id: "ID",
                    fields: {
                        ID: { type: "number" },
                        Selected: { type: "boolean" },
                        Name: { type: "string" },
                        Description: { type: "string" },
                        InternalId: { type: "string" }
                    }
                }
            }
        });
    $("#saveReportList").kendoButton({
        click: function (e) {
            dataSource.sync();
        }
    });
    $("#getReportList").kendoButton({
        click: function (e) {
            mydata.ReportName = $("#keywords").val();
            dataSource.read();
        }
    });
    function setDropDownBoxes(obj) {
        var data = obj.data();
        var availableReports = $("#availableReports").data("kendoListBox");
        var selectedReports = $("#selectedReports").data("kendoListBox");
        var items = availableReports.dataItems();
        for (var i = 0; i < data.length; i++) {
                if (data[i].Selected) {
                    selectedReports.add(data[i]);
                }
                else {
                    availableReports.add(data[i]);
                }
            }
    }
    function setSelected(e, flag) {
        var removedItems = e.dataItems;
        for (var i = 0; i < removedItems.length; i++) {
            console.log(flag + " " + removedItems[i].ID + " " + removedItems[i].Name + " " + removedItems[i].Selected);
            var item = dataSource.get(removedItems[i].ID);
            item.Selected = flag;
            item.dirty = !item.dirty;
        }
    }
});

标签: javascriptkendo-ui

解决方案


不确定应该在哪里进行清洁,但是,您可以同时使用remove()item()方法来清除列表框。

remove()方法接受一个li元素列表,这是items()返回的,因此它将li从列表中删除整个集合。

var listBox = $("#listBox").data("kendoListBox");
listBox.remove(listBox.items());

演示


推荐阅读