当前位置 : 主页 > 网页制作 > JQuery >

jquery – Kendo UI DataSource Destroy函数多次调用多个记录

来源:互联网 收集:自由互联 发布时间:2021-06-15
我在Kendo UI中有一个奇怪的问题 – 我不明白. 这是我的代码. $(document).ready(function() { var kendo_dataSource = new kendo.data.DataSource({ autoSync: true, batch: true, transport: { read: { url: "?php echo BASE_URL . '
我在Kendo UI中有一个奇怪的问题 – 我不明白.

这是我的代码.

$(document).ready(function() {
    var kendo_dataSource = new kendo.data.DataSource({
        autoSync: true,
        batch: true,
        transport: {
            read: {
                url: "<?php echo BASE_URL . 'kendo/kendo_grid_read' ?>",
                dataType: "json"
            },
            destroy: {
                url: "<?php echo BASE_URL . 'kendo/kendo_grid_destroy' ?>",
                dataType: "json",
                type: "POST"
            },
            parameterMap: function(data, type) {
                if (type == "destroy") {
                    return {models: data.models}
                }
            }
        },
        serverFiltering: true,
        serverGrouping: true,
        serverPaging: true,
        page: 1,
        pageSize: 5,
        schema: {
            data: "results",
            total: "total",
            model: {
                id: "field1"
            }
        }
    });

    $("#kendo_grid2").kendoGrid({
        dataSource: kendo_dataSource,
        height: 300,
        filterable: true,
        sortable: true,
        pageable: true,
        selectable: "multiple row",
        columns: [
            {
                field: "field1"
            },
            {
                field: "field2"
            },
            {
                field: "field3"
            }
        ]
    });

    $("#test_button").on("click", function() {
        var selectedRows = $("#kendo_grid2").data("kendoGrid").select();
        if (selectedRows.length > 0) {
            for (var i = 0; i < selectedRows.length; i++) {
                var dataItem = $("#kendo_grid2").data("kendoGrid").dataItem(selectedRows[i]);
                console.log(dataItem);
                kendo_dataSource.remove(dataItem);
            }
        }
    });

});

这就是情况.

当$(“#test_button”).on(“click”,function()被触发时,它会检查网格中的选定行 – 并删除行.

如果我选择2行,则删除2行.并且两行从Grid中消失了.

但是,我看到一些奇怪的东西 –

当删除2行时,有2个POST请求 – 这很好.

但第一个POST请求的参数是

models[0][field1]   3
models[0][field2]   poioioi
models[0][field3]   oiuoiuuigbhkjh
models[0][field4]   kjh kjhkjhyt

第二个POST请求的参数是

models[0][field1]   3
models[0][field2]   poioioi
models[0][field3]   oiuoiuuigbhkjh
models[0][field4]   kjh kjhkjhyt
models[1][field1]   4
models[1][field2]   kjhk hkiui
models[1][field3]   khkj
models[1][field4]   mkhkhkhkjhghgfgdf

我理解,我可以像这样访问服务器中的数据

foreach ($_POST['models'] as $model) {
            echo $model['field1'];           
}

我想知道是否可能只发送一个请求 – 可能只是第二个POST请求,因为我可以删除一个请求中的2行.

或者发送2个单独的请求,但一次只有一个模型?

可能吗?

任何帮助将不胜感激.

这是由autoSync设置引起的.将其设置为true时,数据源会在每次更改后调用sync方法.将autoSync设置为false并手动调用sync()方法将导致数据源仅对一个请求包含所有已删除的数据项.
网友评论