Сетка кендо, добавляющая другой источник данных в качестве объекта в модель при сохранении - PullRequest
0 голосов
/ 09 мая 2018

Итак, я работаю над изучением Kendo, чтобы приблизить нашего работодателя к покупке нескольких лицензий для нашей новой программы веб-разработки.У меня есть Core2 API, настроенный и работающий на внутреннем веб-сервере, и я пытаюсь использовать его для создания страницы администрирования для другого приложения.

Что могло бы вызвать это (описано ниже) и как лучше всего с этим справиться или что я пытаюсь сделать?

Настройка сетки и дисплеев выполнена, но возникла проблема с получениемданные обратно в API, правильно.Кажется странной проблемой, связанной с наличием выпадающих списков в качестве источника данных для 2 полей.

При первой загрузке страницы модель соответствует той, которая определена в схеме источника данных.

schema: {
            model: {
                id: "id",
                fields: {
                    projectName: { validation: { required: true, max: 150 } },
                    projectDescr: { validation: { required: true, max: 500 } },
                    projectOwner: { validation: { required: true, max: 125 } },
                    projectCoder: {type:"number", required:true, validation: { required: true }, from:"projectCoder"},
                    projectCoderNavigation: {  from: "projectCoderNavigation", nullable:false},
                    projectEstHours: {type: "number", validation: {min: 0}},
                    statusId: { validation: { required: true },  from:"statusId"},
                    statusReason: { validation: { max: 125 },from:"statusReason" }
                }
            }

Столбцы сетки Kendo

columns: [
            {field: "projectName", title: "Project Name"},
            {field: "projectDescr", title: "Description", editor: descrEditor},
            {field: "projectOwner", title: "Project Owner"},
            {field: "projectCoder", title: "Programmer", editor:  programmerDDL, template:"#= projectCoderNavigation.adName#" },
            {field: "statusId", title:"Status", editor: statusDDL, template:"#= statusReason#"},
            {field: "projectEstHours", title: "Estimated Hours"}

Данные модели, возвращаемые с сервера (инструменты разработчика Chrome).Здесь он соответствует модели выше, за исключением того, что свойство projectCoderNavigation также включает projectTime, Tasks и повтор проектов.

Model data returned from server

Когда я нажимаю кнопку добавления новой записи, данные модели корректно обновляются с пустыми данными.

model data is updated with blank data correctly

Однако после нажатия кнопки «Сохранить» модель меняется, и добавляется новый объект «adName», который соответствует источнику данных для раскрывающегося списка, используемого для выбора.ProjectCoder остается 0, projectCoderNavigation остается нулевым, а другие поля обновляются.

after save - before actual POST

И, конечно, POST не работает из-за недопустимого состояния модели.

fiddler fail input not valid

EDIT

Это функция для заполнения редактора DDL.

function programmerDDL(container, options) {
   // var input = $("<input/>");
    //input.attr("projectCoderNavigation.adName",options.field);
   // input.append(container);

    $('<input type="text" class="k-input k-textbox"  name="adName"/>')
        .appendTo(container)
        .kendoDropDownList({
            autoBind: false,
            //valuePrimitive: true,
            dataTextField: "adName",
            dataValueField: "id",
            dataSource: usersListDs,
            text: "Select someone"

            });
}

Назначение редактора раскрывающемуся меню.

{field: "projectCoder", title: "Programmer", editor:  programmerDDL, 
template:"#= projectCoderNavigation.adName#" },

Примечание.

Мне удалось отработать его, чтобы я назначил projectCoder через карту параметров, но все еще имею пустое свойство projectCoderNavigation и нежелательный объект "adName" в options.models.

parameterMap: function(options, operation) {
    if (operation !== "read" && options.models) {
        console.log("model: "+options.models);
        if (operation === "create") {
            options.models[0].projectCoder = options.models[0].adName.id;
            }
            console.log(options.models);
            console.log(kendo.stringify(options.models));
     return  options.models;
         }
     }

РЕДАКТИРОВАТЬ 2

Итак, я перешел к тому, где я могу убедиться, что запрос достигает API, и, вероятно, закрою этот вопрос, но сначала я предоставлю больше информации.

Когданажата кнопка сохранения, API получает запрос POST.Однако данные из полезной нагрузки не используются данным методом.

Mutliple signatures I've attempted

Ответ - HTTP-код 500, так как модель была нулевой, а вставка завершилась неудачно из-за ограничений внешнего ключа.

Оператор INSERT вступил в конфликт с ограничением FOREIGN KEY "FK_att_projects_att_Users".Конфликт произошел в базе данных «ASSIST_TimeTracking», таблице «dbo.att_users», столбце «id».Заявление было прекращено.

request headers from chrome dev tools

...