Почему метод Kendo dataSouce.transport.update не отправляет данные на сервер?

0

У меня есть TreeList пользовательского интерфейса Kendo, где каждая строка имеет флажок. Если пользователь нажмет на этот флажок, тогда запрос перейдет на сервер и сохранит данные. К сожалению, я сделал что-то неправильно, потому что:

  • метод обновления не отправляет данные на сервер
  • и метод синхронизации не вызывается автоматически

Что я сделал не так?

Я думаю, что проблема вокруг того, как я настроил тот элемент, который изменился. Как вы видите, я перебираю набор данных, поступающий из dataSource.data(), и свойства item.checked и item.dirty обновляются. Если я правильно понимаю документацию, тогда это изменение должно инициировать метод синхронизации. Он не вызывает синхронизацию, и это причина, по которой я вызываю ее в методе.

Другой вопрос, связанный с структурой данных, должен быть отправлен на сервер. Он основан на схеме, не так ли? Поэтому, как только я смогу добиться, чтобы запрос отправил объект на сервер, я должен создать аналогичную модель С# POCO, и я могу прочитать данные в контроллере webapi.

В документации есть метод saveRow(), но я не могу перевести этот код в угловой. Может ли кто-нибудь помочь мне в этом случае?

//this row is my problem
var treeList = $("#treeList").data("kendoTreeList");
var dataSource = new kendo.data.TreeListDataSource({
                transport: {
                    read: {
                        url: configurationService.goNoGoWebApiRootUrl + 'AreaPathDependencies/Get/ChildrenMarked/' + selectedAreaPathIdFromModalService,
                        dataType: "json",
                        type: "get"
                    },
                    update:
                        {
                            url: configurationService.goNoGoWebApiRootUrl + 'AreaPathDependencies/Update/AreaPathDependencies',
                            dataType: "json",
                            type: "post"
                        },
                    parameterMap: function (options, operation) {
                        if (operation !== "read" && options.models) {
                            return { models: kendo.stringify(options.models) };
                        }
                    }
                },
                schema: {
                    model: {
                        id: "id",
                        parentId: "parentId",
                        fields: {
                            Id: { type: "number", editable: false, nullable: true },
                            ParentId: { type: "number", editable: false, nullable: true },
                            Name: { type: "string", editable: false, nullable: true },
                            Checked: { type: "boolean", editable: true, nullable: false }
                        }
                    }
                }
            });

            vm.treeListOptions = {
                dataSource: dataSource,
                sortable: false,
                editable: false,
                columns: [
                    {
                        field: "checked",
                        title: "Selected",
                        template: checkBoxTemplate,
                        width: 32
                    },
                    { field: "name", title: "Area Path", width: "200px", expandable: true },
                    { field: "fullPath", title: "FullPath", width: "500px" },
                ],
                save: onSave,
                change: onChange,
                sync: sync,
                autoSync: true,
            };

        }

        function checkboxOnclick(selectedId) {
            console.log('checkboxOnclick', selectedId);
            var data = vm.treeListOptions.dataSource.data();
            for (var i = 0; i < data.length; i++) {

                if (selectedId == data[i].id) {
                    data[i].set("checked", true);
                    //data[i].dirty = true;
                }
            }

            vm.treeListOptions.dataSource.sync();

            //console.log('flush', vm.treeListOptions.dataSource.data());
        }
  • 0
    Пожалуйста, попробуйте установить batch: true ( batch docs ) в ваш источник данных (на том же уровне, что и транспорт и схема).
  • 0
    Вау! Оно работает! Тем не менее, мне нужно вызвать метод синхронизации. Все еще остается вопрос, нужно ли мне вызывать метод синхронизации или изменение виджета должно сохраняться автоматически виджетом. Зачем болтать: правда нужна? Это дефект? Пожалуйста, напишите ответ, и я приму его.
Теги:
kendo-ui
kendo-treelist

1 ответ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню