2013-08-21 25 views
1

只是想知道为什么JavaScript的刀片推法“指数”剑道数据源追加模式ID上datasoure同步

var agendaBatch=[]; 

    for(var i=0; i<agendas.length; i++) { 

     var agenda = { 
      MeetingId: meetingId, 
      Title: agendas[i].title, 
      Description: agendas[i].description, 
      Remarks: "", 
     }; 

     agendaBatch.push(agenda); 
    } 

    console.log(kendo.stringify(agendaBatch)); 
    dataSourceAgenda.add(agendaBatch); 

    dataSourceAgenda.sync(); 

输出:

{"0":{"Title":"Agenda title","Description":"Agenda details","Remarks":""}, 
"1":{"Title":"Agenda title","Description":"Agenda details","Remarks":""}} 

我的期望是这样的输出符合我的网页API参数要求

[{"Title":"Agenda title","Description":"Agenda details","Remarks":""}, 
{"Title":"Agenda title","Description":"Agenda details","Remarks":""}] 

任何建议,我怎么能做到这一点?....

更新:刚刚发现刚才,我使用的剑道UI数据源,当我删除了标识上的架构

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参数我固定的问题,无论如何,我可以做到这一点,而无需删除剑道数据源中的Id。

更改了问题标题!

+2

看起来更像是一个'kendo.stringify'问题,不能正确序列化数组。 “JSON.stringify”的结果是什么? –

回答

3

根据剑道UI数据源(here)的文档,add方法接受ObjectObject的一个array

此外,您使用id字段Id不属于您的model的字段。

试着做以下几点:

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

即:

  1. 设置batchtrue为能够同时发送多个请求,当你调用sync
  2. 定义在schema.model.fields定义Id
  3. 做的stringifyoptions.models
0

由于agendaBatch显然是一个数组,我认为kendo.stringify没有正确序列化它。你可以去JSON.stringify

请注意,这不是由旧的浏览器来实现。如果你需要支持他们,你可以包括由Douglas Crockford的脚本:

https://github.com/douglascrockford/JSON-js/blob/master/json2.js


编辑

现在你改变了你的问题 - 我并不真正熟悉的剑道UI ,所以这真的只是一个疯狂的猜测试图帮助你解决更新的问题。

它看起来像你在beforeSend功能访问data。你可以尝试操纵它为您的需求,这样也许:

beforeSend: function (xhr, s) { 
    var arrayData = []; 

    for (var id in s.data) { 
     arrayData.push(s.data[id]); 
    } 

    s.data = arrayData; 
} 
+0

请参阅我的编辑,它不是真正的kendo.stringify。它是在提琴手中传递的实际价值。 – xlinc

+0

现在我不熟悉kendo ui,但是我做了一个编辑,至少可以帮助您找到解决方案... –

+0

将会考虑它!谢谢! – xlinc