Kendo ui 是否更改使用kendo.datasource更新时发送到服务器的相关数据的数据?

Kendo ui 是否更改使用kendo.datasource更新时发送到服务器的相关数据的数据?,kendo-ui,Kendo Ui,我正在使用$expand获取相关数据,这些数据工作正常,但我需要更改发送回的数据 当数据更新时发送到服务器 示例:如果我的服务器端数据模型包含两个实体 接触 身份证号码 名字:string 名称:字符串 姓氏:string 触点类型:触点类型n-1 接触式 ID:nubmer 名称:string ContactCollection:ContactType 1-n 这是我的数据源代码 function GetContactDS(){ var MyModel = kendo.data

我正在使用$expand获取相关数据,这些数据工作正常,但我需要更改发送回的数据 当数据更新时发送到服务器

示例:如果我的服务器端数据模型包含两个实体 接触 身份证号码 名字:string 名称:字符串 姓氏:string 触点类型:触点类型n-1

接触式 ID:nubmer 名称:string ContactCollection:ContactType 1-n

这是我的数据源代码

function GetContactDS(){
        var MyModel = kendo.data.Model.define({
                                id: "ID",
                                fields: {
                                __KEY: { type: "string" },
                                __STAMP: { type: "number" },
                                ID: { editable: false, nullable: true },                                                               
                                firstName: { type: "string" },
                                middleName: { type: "string" },                                                        
                                lastName: { type: "string" }                               
                                },                             
                            });

            var crudServiceBaseUrl = "http://127.0.0.1:8081/cors/Contact";
            var  MyDataSource = new kendo.data.DataSource({
        transport: {
       read: function(options) {
               $.ajax( {
                url: crudServiceBaseUrl + '/?$expand=ContactType',
                dataType: "json",
                data: options.data,
                success: function(result) {
                    options.success(result);
                }
            });
        },

    update: function(options) {
            $.ajax( {
                url: crudServiceBaseUrl + "/?$method=update",
                type: "POST",
                dataType: "json",
                data: kendo.stringify(options.data.models),
                success: function(result) {
                    // notify the DataSource that the operation is complete

                    options.success(result);
                }
            });
        },
                                destroy: {
                                url: crudServiceBaseUrl + "/?$method=delete",
                                type: "GET"
                                },
                                create: {
                                url: crudServiceBaseUrl + "/?$method=update",
                                dataType: "json",
                                type: "POST"
                                },
                                          parameterMap: function(options, operation) {
                                    if (operation !== "read" && options.models) {
                                       return  JSON.stringify({"__ENTITIES": options.models});
                                    }
                                }
                                },
                                batch: true,
                                pageSize: 30,
                                schema: {
                                     model: MyModel,
                                    data: "__ENTITIES"                         
                                    }

            });

      return MyDataSource;
}
读取请求返回此数据

{"__entityModel":"Contact","__COUNT":1,"__SENT":1,"__FIRST":0,"__ENTITIES":[{"__KEY":"7","__STAMP":9,"ID":7,"firstName":"jay","middleName":"a","lastName":"blue","ContactType":{"__KEY":"2","__STAMP":4,"ID":2,"name":"Home","contactCollection":{"__deferred":{"uri":"/rest/ContactType(2)/contactCollection?$expand=contactCollection"}}}}]}
下面是调用读取并绑定到网格的代码

var ContactDS = GetContactDS();

    $("#grid").kendoGrid({
        selectable: "row",
        filterable: true,
        pageable: true,
        sortable: true,
        change: function(){

                 datamodel = this.dataItem(this.select());
                 ID = datamodel.ID

        },
        dataSource: ContactDS,
        columns: [
            { field: "ID" },
            { field: "firstName" },
            { field: "middleName" },
            { field: "lastName" },
            {field: "ContactType.name"}

        ]
    });
这很好,我在数据源中获得ContactType的扩展信息,它绑定到网格fine。 现在,我想在将选定的数据行读入表单后更新,将数据读入表单效果良好

问题是将更新发送回服务器,该服务器希望相关实体ContactType的格式略有不同 只需更改“\uuuu Key”的值即可进行更新 以下是我的更新功能:

$("#update").click(function () {
                  datamodel.set("firstName", $("#firstName").val());
                  datamodel.set("lastName", $("#lastName").val());
                  datamodel.set("middleName", $("#middleName").val());
               //   datamodel.set("ContactType.__KEY",3);



                  ContactDS.sync();
以下是服务器需要的数据

{ "__ENTITIES": [{"__KEY":"7","__STAMP":14,"firstName":"jay","middleName":"a","lastName":"red","ContactType":{"__KEY":"2"}}]}
下面是kendo.datasource发送的内容

[{"__KEY":"7","__STAMP":12,"ID":7,"firstName":"jay","middleName":"a","lastName":"blue","ContactType":{"__KEY":"3","__STAMP":2,"ID":3,"name":"Work","contactCollection":{"__deferred":{"uri":"/rest/ContactType(3)/contactCollection?$expand=contactCollection"}}}}]
那么,我如何重新格式化数据或定义我的模型或数据源选项,以确保删除额外的ContactType字段,只留下更新的“_KEY:”,并将整个请求包装在{u ENTITIES:}

谢谢你的帮助


Dan

您可以尝试使用功能以您需要的方式格式化数据。

我想我从中找到了答案

它对使用parameterMap做了更多的解释。如果您查看parameterMap上的kendoui文档,它似乎表明这仅用于管理以下参数 页面索引、大小、排序依据等。但从上面的帖子中,它向您展示了如何删除相关实体,或者您可以只删除或修改实体或相关实体的字段

示例我可以只删除相关实体ContactType的ContactTypeID

parameterMap:功能(选项、操作){

还有一些工作要做,但我想这会让我达到目的


感谢Pechka的帮助

我查看了文档并尝试了一下,但不确定如何将其格式化为数据,您有代码示例吗?文档非常稀疏,示例非常简单
                            if (operation == "create") {

                            return  JSON.stringify({"__ENTITIES": options.models});
                            }
                            else if (operation == "update") {
                                debugger;
                            delete options.models[0].ContactType.ID;
                            return  JSON.stringify({"__ENTITIES": options.models});
                             }
                        }