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