Как удалить все элементы из kendoListBox - PullRequest
0 голосов
/ 29 января 2019

У меня есть два списка кендо, между которыми они обмениваются предметами.В основном, доступные предметы и пара выбранных предметов.У меня есть служба Json, которая контролирует, какие элементы доступны через массив Json.
Когда пользователь выбирает новый фильтр, я хочу, чтобы оба списка Kendo List Box очищали элементы перед добавлением новых элементов с сервера.
В настоящее время этодобавляет новый список с сервера в текущий список.

$(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;
        }
    }
});

1 Ответ

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

Не знаю, где именно вы должны выполнять чистку, но вы можете использовать оба метода remove() и item() вместе, чтобы очистить список.

remove() метод принимает список li элементов, то есть то, что возвращает items(), поэтому он удалит всю коллекцию li из списка.

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

Demo

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