7

Kendo グリッドのバッチ編集をオンにすると、作成、更新、および破棄のコマンドにフックできることがわかります。[変更の保存] をクリックすると、Kendo が 3 つの個別のコマンドをサーバーに送信します。

トランザクションのように、3 つの更新セットすべてをサーバーへの単一の呼び出しとして送信する方法があるかどうか疑問に思っていました。または、指定された順序でそれぞれを送信し、次の送信前に成功を確認します。

私が思いついた唯一の方法は、呼び出し時にグリッドデータソースを検索して、追加されたすべての行 (追加された行の場合は isNew())、削除されたすべての行 (削除された行の場合は _destroyed) を見つけるカスタムの Save Changes 実装を持つことでした。 )、更新 (更新された行の場合は isDirty) し、識別されたデータセットを使用して ajax を使用して、サーバー エンドポイントへの独自の呼び出しを作成します。

4

3 に答える 3

13

Telerik は最近、コード ライブラリに回避策を投稿しました: http ://www.kendoui.c​​om/code-library/mvc/grid/save-all-changes-with-one-request.aspx 。残念ながら、回避策はかなり必要最小限です。これは、破棄された、ダーティな、および新しいレコードをキャプチャする方法の良い例ですが、応答のエラーを処理し、成功時にデータ ソースを同期するために手を振って終了します。また、ajax リクエストを行う前に、破棄された、ダーティな、または新しいレコードがあることを確認するチェックがないことにも注意してください。

関連するコードは次のとおりです。上記のリンクから完全な例をダウンロードして、グリッドのセットアップ方法を確認し、最新バージョンであることを確認してください。

function sendData() {
    var grid = $("#Grid").data("kendoGrid"),
        parameterMap = grid.dataSource.transport.parameterMap;

    //get the new and the updated records
    var currentData = grid.dataSource.data();
    var updatedRecords = [];
    var newRecords = [];

    for (var i = 0; i < currentData.length; i++) {
        if (currentData[i].isNew()) {
            //this record is new
            newRecords.push(currentData[i].toJSON());
        } else if(currentData[i].dirty) {         
            updatedRecords.push(currentData[i].toJSON());
        }
    }

    //this records are deleted
    var deletedRecords = [];
    for (var i = 0; i < grid.dataSource._destroyed.length; i++) {
        deletedRecords.push(grid.dataSource._destroyed[i].toJSON());
    }

    var data = {};
    $.extend(data, parameterMap({ updated: updatedRecords }), parameterMap({ deleted: deletedRecords }), parameterMap({ new: newRecords }));

    $.ajax({
        url: "/Home/UpdateCreateDelete",
        data: data,
        type: "POST",
        error: function () {
            //Handle the server errors using the approach from the previous example
        },
        success: function () {
            alert("update on server is completed");

            grid.dataSource._destroyed = [];
            //refresh the grid - optional
            grid.dataSource.read();
        }
    })
}
于 2014-01-21T21:06:08.737 に答える
2

多分あなたはのbatchプロパティを有効にすることができますDatasource

batch Boolean (デフォルト: false)

true に設定すると、データ ソースは CRUD 操作要求をバッチ処理します。たとえば、2 つのデータ項目を更新すると、2 つではなく 1 つの HTTP 要求が発生します。デフォルトでは、データ ソースはすべての CRUD 操作に対して HTTP リクエストを作成します。

ソース:データソース API

于 2013-06-11T09:15:54.787 に答える