Как определить, были ли ошибки проверки после вызова (Kendo) grid.SaveChanges() в javascript

Я вызываю grid.SaveChanges() в моей функции javascript. Сетка использует встроенный режим редактирования.

Моя проблема заключается в том, что если были некоторые ошибки проверки на стороне client, например, неверный формат даты, тогда я не должен выполнять некоторые операции DOM. К сожалению, grid.SaveChanges() не имеет возвращаемого значения, и поиск по ключевому слову «действительный» на странице документации по сетке не дал результатов. (Телепорт в документацию по API Kendo Grid)

Итак: как я могу определить, были ли ошибки проверки после SaveChanges() или данные были успешно синхронизированы с постоянным хранилищем?

Спасибо заранее


person g.pickardou    schedule 03.05.2013    source источник


Ответы (1)


Я предполагаю, что вы используете оболочки MVC, но вызываете grid.SaveChanges() как часть своего скрипта. Поскольку вы используете встроенный режим редактирования, это означает, что вы используете Ajax. Если эти предположения верны, то при вызове SaveChanges() выполняется действие вашего контроллера, указанное в оболочке. Если вы подключаетесь к событию .Error, вы можете выполнить любой скрипт, который необходимо выполнить (даже если это просто установка переменной, которую вы проверяете в других частях вашего скрипта). Взгляните на Ajax Editing раздел «Начало работы» на веб-сайте Кендо. Ваш код Razor будет выглядеть следующим образом (некоторые из них являются посторонними, я вытащил их из производственного кода и немного изменил):

@(Html.Kendo().Grid(Model)
.Name("Grid")
.Columns(cols =>
    {
        cols.Bound(p => p.ColumnA);

    })
.Editable(edit => edit.Enabled(true).Mode(GridEditMode.InCell))
.DataSource(ds => ds
            .Ajax()
            .AutoSync(false)
            .Model(model => 
                {
                    model.Id(p => p.ColumnId);                   
                })
            // Configure RU -->
                .Read(read => read.Action("_MyRead", "MyController").Data("additionalData"))
                .Update(update => update.Action("_MyUpdate", "MyController").Data("additionalData"))
                //.ServerOperation(false)
                .Batch(true)
                .Events(events => events
                    .Error("onError")            
                    )
                )
            // <-- Configure RU
        .Pageable(page => page.PageSizes(new int[] { 10, 25, 50, 100 }).Enabled(true))
        .Groupable(group => group.Enabled(true))
        .Filterable(filter => filter.Enabled(true).Extra(false))
        .Sortable(sort => sort.Enabled(true).SortMode(GridSortMode.SingleColumn).AllowUnsort(true))
        .Navigatable(nav => nav.Enabled(true))
        .Resizable(resizing => resizing.Columns(true))
        .Reorderable(reorder => reorder.Columns(true))
            )

Тогда ваш скрипт onError будет выглядеть так:

function onError(e, status) {
    if (e.errors) {
        var message = "The following errors have occurred and changes will be discarded:\n";

        $.each(e.errors, function (key, value) {
            if (value.errors) {
                message += value.errors.join("\n");
            }
        });

        alert(message);
        var grid = $("#Grid").data("kendoGrid");
        grid.cancelChanges();
    }
}
person Elsimer    schedule 01.08.2013