4

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 行が削除されます。そして、2 行がグリッドから消えます。

しかし、私は何か奇妙なものを見ます -

2 行が削除されると、2 つの POST 要求が発生しますが、これは問題ありません。

しかし、最初の POST リクエストのパラメータは

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

2 番目の 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'];           
}

1回のリクエストで2行を削除できるため、1回のリクエストのみを送信できるかどうか疑問に思っていました。おそらく2番目のPOSTリクエストのみです。

または、一度に 1 つのモデルのみで 2 つの別々のリクエストを送信しますか?

出来ますか?

どんな助けでも大歓迎です。

4

5 に答える 5

3

これはautoSync設定が原因です。true に設定すると、データ ソースはsync変更のたびにメソッドを呼び出します。このメソッドを設定autoSyncfalseて手動で呼び出すとsync()、データ ソースは削除されたすべてのデータ項目に対して 1 つの要求のみを行うことになります。

于 2013-04-11T11:18:11.437 に答える
1

私は同様の問題を抱えていました。

dataSource の destroy 属性に関数を使用しています。私の問題は、行を連続して削除するたびに、destroy 関数が累積的に呼び出されることでした。これは、最初の削除では関数が 1 回呼び出され、2 回目の削除では 2 回呼び出されたということを意味します。

私の場合、問題は、削除が成功したことを dataSource に通知していなかったことが原因でした。以下は、Kendo UI のドキュメントからのコードの関連部分です。私は成功の部分を見逃していました。

    destroy: function (options) {
      $.ajax({
        url: "http://demos.kendoui.com/service/products/destroy",
        dataType: "jsonp",
        data: {
          models: kendo.stringify(options.data.models)
        },
        success: function(result) {
          // notify the data source that the request succeeded
          options.success(result);
        },
        error: function(result) {
          // notify the data source that the request failed
          options.error(result);
        }
      });
于 2013-11-06T20:41:19.813 に答える