Javascript Kendo数据源在数据源同步上附加架构Id

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,当我删除模

只是想知道为什么javascript的push方法会插入“索引”

我所期望的是这个输出符合我的Web API参数要求

[{"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" }
                }
            }
        }
    });