Javascript Kendo数据源在数据源同步上附加架构Id
只是想知道为什么javascript的push方法会插入“索引” 我所期望的是这个输出符合我的Web API参数要求Javascript Kendo数据源在数据源同步上附加架构Id,javascript,arrays,asp.net-web-api,kendo-ui,Javascript,Arrays,Asp.net Web Api,Kendo Ui,只是想知道为什么javascript的push方法会插入“索引” 我所期望的是这个输出符合我的Web API参数要求 [{"Title":"Agenda title","Description":"Agenda details","Remarks":""}, {"Title":"Agenda title","Description":"Agenda details","Remarks":""}] 有什么建议我该怎么做吗 更新:刚刚发现,我正在使用KendoUIDataSource,当我删除模
[{"Title":"Agenda title","Description":"Agenda details","Remarks":""},
{"Title":"Agenda title","Description":"Agenda details","Remarks":""}]
有什么建议我该怎么做吗
更新:刚刚发现,我正在使用KendoUIDataSource,当我删除模式上的Id时,我修复了这个问题
var dataSourceAgenda = new kendo.data.DataSource({
transport: {
type: "odata",
create: {
type: "POST",
url: API_URL + "/agendas",
contentType: "application/json; charset=utf-8",
dataType: 'json'
},
parameterMap: function (options, operation) {
if (operation !== "read" && options) {
return kendo.stringify(options);
}
}
},
schema: {
model: {
id: "Id", //I get my desired output if this is removed
fields: {
MeetingId: { type: "number" },
Title: { type: "string" },
Description: { type: "string" },
Remarks: { type: "string" },
}
},
}
});
但是,我需要在其他函数中添加Id参数,我是否可以在不删除kendo数据源中的Id的情况下执行此操作
更改了问题标题 由于
agendaBatch
显然是一个数组,我假设kendo.stringify
没有正确地序列化它。您可以使用JSON.stringify
请注意,这不是由较旧的浏览器实现的。如果需要支持它们,可以包括Douglas Crockford的脚本:
编辑 既然你改变了你的问题-我对剑道ui不是很熟悉,所以这真的只是一个猜测,试图帮助你解决更新后的问题 看起来您可以访问
发送前功能中的数据。您可以尝试根据自己的需要对其进行操作,例如:
beforeSend: function (xhr, s) {
var arrayData = [];
for (var id in s.data) {
arrayData.push(s.data[id]);
}
s.data = arrayData;
}
根据kendouidatasource()的文档,add
方法接受对象
而不是对象
的数组
此外,您可以将名为id
的字段用作id
,该字段不在模型的字段中
尝试执行以下操作:
var dataSourceAgenda = new kendo.data.DataSource({
transport: {
create : function (op) {
...
},
parameterMap: function (options, operation) {
if (operation !== "read" && options) {
return kendo.stringify(options.models);
}
}
},
batch : true,
schema : {
model: {
id : "Id", //I get my desired output if this is removed
fields: {
Id : { type: "number" },
MeetingId : { type: "number" },
Title : { type: "string" },
Description: { type: "string" },
Remarks : { type: "string" }
}
}
}
});
即:
将batch
设置为true
,以便在调用sync
时能够一次发送多个请求
在schema.model.fields
definition中定义Id
执行选项的字符串化
看起来更像是kendo.stringify未正确序列化数组的问题。JSON.stringify的结果是什么?请看我的编辑,它实际上不是kendo.stringify。这是在fiddler中传递的实际值。现在我不熟悉剑道ui,但我做了一个编辑,至少可以帮助您找到解决方案…不起作用。。我想当我字符串化s数据时,我必须手动删除json字符串中的索引。这是我得到的[“{”、“\”、“0”、“\”、“:”、“{”、“\”、“T”、“I”、“T”、“T”、“T”、“l”、“e”、“e”、“e”、“A”、“g”、“e”、“n”、“d”、“A”、“T”、“I”、“T”、“T”、“l”、“e”、“e”、“d”、“e”、“e”、“s”、“c”、“r”、“I”、“p”、“T”、“I”、“o”、“o”、“n”、“A”、“e”、“A”、“e”、“A”、“e”、“e”、“d”、“e”、“d”、“e”、“d”、“e”、“e”、“d”、“e”、“d”、“e”、“e”、“e”、“d”、“e”、“d”、“e”、“d”、“e”、“d”、“e”、“d”、“e”、“e”、“d”、“e”、“e”、“d”、“e”、“d”、“e”、“d”、“e”、“d”、“e”、“d”、“d”、“d”、“e”、“d”、“e”、“d”、“e”、“d”、“d”、“e”、“d”、“e”、“e”、“d”、“e”、“e
beforeSend: function (xhr, s) {
var arrayData = [];
for (var id in s.data) {
arrayData.push(s.data[id]);
}
s.data = arrayData;
}
var dataSourceAgenda = new kendo.data.DataSource({
transport: {
create : function (op) {
...
},
parameterMap: function (options, operation) {
if (operation !== "read" && options) {
return kendo.stringify(options.models);
}
}
},
batch : true,
schema : {
model: {
id : "Id", //I get my desired output if this is removed
fields: {
Id : { type: "number" },
MeetingId : { type: "number" },
Title : { type: "string" },
Description: { type: "string" },
Remarks : { type: "string" }
}
}
}
});