Kendo Grid: как добавить к URL - PullRequest
       7

Kendo Grid: как добавить к URL

0 голосов
/ 13 февраля 2019

Я хочу сделать мой URL-адрес обновления для моей сетки Kendo динамическим.Я хочу иметь возможность перейти от "http://dummy.restapiexample.com/api/v1/update" к" http://dummy.restapiexample.com/api/v1/update/100"

Я следовал руководству Kendo для пользовательских источников данных.Я изменил функцию «parameterMap» и могу изменить значение URL-адреса обновления, но, похоже, он не привязывается.

@(Html.Kendo().Grid<KendoDemo.Models.EmployeeViewModel>()
            .Name("NCSBEGrid")
            .Columns(columns =>
            {
                columns.Bound(p => p.employee_name).Title("Name");
                columns.Bound(p => p.employee_age).Width(140).Title("Age");
                columns.Bound(p => p.employee_salary).Width(140).Title("Salary");
                columns.Bound(p => p.profile_image).Hidden(true);
                columns.Command(command => command.Destroy()).Width(110).Title("Delete");
            })
            .ToolBar(toolbar =>
            {
                toolbar.Create();
                toolbar.Save();
            })
            .Editable(editable => editable.Mode(GridEditMode.InCell))
            .Pageable()
            .Navigatable()
            .Sortable()
            .Scrollable()
            .DataSource(dataSource => dataSource
                .Custom()
                .Events(events => events.Error("error_handler")         
                )
                .Batch(true)
                .PageSize(20)
                .Schema(schema => schema
                .Model(m => m.Id(p => p.id)))
                .Transport(transport =>
                {
                    transport.Read(read =>
                        read.Url("http://dummy.restapiexample.com/api/v1/employees")
                            .DataType("json")
                    );
                    transport.Create(create =>
                        create.Url("http://dummy.restapiexample.com/api/v1/create")
                        .Type(HttpVerbs.Post)
                        .DataType("json")
                    );
                    transport.Update(update =>
                        update.Url("http://dummy.restapiexample.com/api/v1/update")
                        .Type(HttpVerbs.Put)
                        .DataType("json")
                    );
                    transport.Destroy(destroy =>
                        destroy.Url("http://dummy.restapiexample.com/api/v1/update")
                        .Type(HttpVerbs.Delete)
                        .DataType("jsonp")
                    );
                    transport.ParameterMap("parameterMap");
                })
            )
)
<script>
    function parameterMap(options, operation) {

        var grid = $("#NCSBEGrid").data("kendoGrid");

        if (operation == "create") {

            var params = { "name": options.models[0].employee_name, "salary": options.models[0].employee_salary, "age": options.models[0].employee_age };

            return JSON.stringify(params);
        }
        else if (operation == "update") {
            var params = { "name": options.models[0].employee_name, "salary": options.models[0].employee_salary, "age": options.models[0].employee_age };

            grid.dataSource.transport.options.update.url = "http://dummy.restapiexample.com/api/v1/update/" + options.models[0].id;

            //grid.dataSource.sync;
            //grid.dataSource.transport.options.update.data = JSON.stringify(params);           
            //grid.dataSource.read; 

            return JSON.stringify(params);
        }
    }

    function error_handler(e) {
        if (e.errors) {
            var message = "Errors:\n";
            $.each(e.errors, function (key, value) {
                if ('errors' in value) {
                    $.each(value.errors, function () {
                        message += this + "\n";
                    });
                }
            });
            alert(message);
        }
    }
</script>

В разделе JavaScript я ожидаю, что URL-адрес обновления будет содержать идентификатор в конце.В настоящее время он обновляется, но когда выполняется вызов фиктивного API, идентификатор пропускается.Кажется, это легко сделать, но я не могу понять.

Любая помощь будет признательна.

1 Ответ

0 голосов
/ 22 февраля 2019

Я использовал обработчик для добавления идентификатора сотрудника в URL.Спасибо Джо за помощь.

MVC:transport.Update (new {url = new Kendo.Mvc.ClientHandlerDescriptor () {HandlerName = "update"}});

Javascript:

function update(options) {

    let params = {
        "name": options.employee_name,
        "salary": options.employee_salary,
        "age": options.employee_age
    };

    let json = JSON.stringify(params);

    $.ajax({
        method: "PUT",
        url: "http://dummy.restapiexample.com/api/v1/update/" + options.id.toString(),
        dataType: "json",
        data: json
    });

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...