8

問題を示すフィドルをここに置きました。

http://jsfiddle.net/codeowl/fmzay/1/

レコードを削除するだけで、destroy 関数内から options.error を呼び出しているため、削除をロールバックする必要があります。

グリッドがロールバックしないのはなぜですか?

よろしく、

スコット

マークアップ:

<div id="KendoGrid"></div>

JS:

var _data = [
        { Users_ID: 1, Users_FullName: 'Bob Smith', Users_Role: 'Administrator'  },
        { Users_ID: 2, Users_FullName: 'Barry Baker', Users_Role: 'Viewer'  },
        { Users_ID: 3, Users_FullName: 'Bill Cow', Users_Role: 'Editor'  },
        { Users_ID: 4, Users_FullName: 'Boris Brick', Users_Role: 'Administrator'  }
    ],
    _dataSource = new kendo.data.DataSource({ 
        data: _data,
        destroy: function (options) {
            options.error(new Error('Error Deleting User'));
        }
    });

$('#KendoGrid').kendoGrid({
    dataSource: _dataSource,
    columns: [
        { field: "Users_FullName", title: "Full Name" },
        { field: "Users_Role", title: "Role", width: "130px" },
        { command: ["edit", "destroy"], title: "&nbsp;", width: "180px" }
    ],
    toolbar: ['create'],
    editable: 'popup'
});
4

2 に答える 2

18

エラーを通知するだけでは不十分です。KendoUI はレコードがサーバーで実際に削除されたかどうかを認識せず、応答がエラーを生成するものであるため、レコードの削除時にエラーが発生するだけでは不十分であるとしましょう。したがって、KendoUI のアプローチは保守的なアプローチです。何をするかを決定し、それを明示的に言う必要があります。

したがって、グリッドでerrora を呼び出すハンドラ関数を追加する必要があります。cancelChanges

コードは次のようになります。

_dataSource = new kendo.data.DataSource({
    transport: {
        read: function(options) {
            options.success(_data);
            console.log('Read Event Has Been Raised');
        },
        destroy: function (options) {
            options.error(new Error('Error Deleting User'));
            console.log('Destroy Event Has Been Raised');
        }
    },
    schema: {
        model: {
            id: "Users_ID",
            fields: {
                Users_ID: { editable: false, nullable: true },
                Users_FullName: { type: "string", validation: { required: true } },
                Users_Role: { type: "string", validation: { required: true } }
            }
        }
    },
    error: function(a) {
        $('#KendoGrid').data("kendoGrid").cancelChanges();
    }
});

更新された JSFiddle はこちら: http://jsfiddle.net/OnaBai/fmzay/3

于 2013-05-14T12:15:32.210 に答える
3

OnaBai の回答に対する ASP.NET-MVC の同等のソリューションは次のようになります。

<script type="text/javascript">
function cancelChanges(e) {
    e.sender.cancelChanges();
}
</script>

@Html.Kendo().Grid<MyClass>()
.DataSource(dataSource =>
    dataSource
    .Ajax()
    .Read(read => read.Action("Read", "MyController"))
    .Destroy(destroy => destroy.Action("Destroy", "MyController"))
    .Events(evt => evt.Error("cancelChanges"))
)
[...]

すべての CRUD リクエストでエラーが発生すると、 cancelChangesイベントが呼び出されることに注意してください。

于 2015-11-12T11:02:24.657 に答える