骨干解析返回结果数组

时间:2013-10-11 23:55:22

标签: backbone.js

宁静的api im调用在'Payload'

中包含所需的有效载荷(模型)

我只能让它以这种方式工作,通过1.将每个添加到this.add(模型)和2.返回数组

注意:'this'是Backbone Collection

parse: function(resp, xhr) {
  var that = this;
  var ourPayload = resp.Payload;
  ourPayload.forEach( function(model) { that.add(model);} );
  return ourPayload;
},

在所有的例子中我都希望能够做到

parse: function(resp, xhr) {
     return resp.Payload;
}

其余api的格式为“{”Success“:”true“,....,”Payload“:[{model},{model},{model}],....}

可以解释对collection.add(模型)

的需求

2 个答案:

答案 0 :(得分:2)

问题是,在Collection fetch中,如果定义了每个Model的解析,将被调用。在这种情况下,可能会定义模型的解析函数 :RESTful API格式使用有效负载周围的包装。

Backbone docs

  

获取模型或集合后,所有已定义的解析函数   现在将运行。所以获取一个集合并获得新模型   可能导致集合解析列表,然后解析每个模型   如果你定义了两个函数,则依次解析。

因此,您需要定义一个解析,如下所示。请注意,'Payload'是包装器的名称,无论是有效负载,数据,结果,

   // Within a collection, it will not.
   parse: function (response, xhr) {
     if (_.isObject(response.Payload)) {
         return response.Payload;
     } else {
         return response;
     }
   }

现在该线索来自nikoshr in this SO answer

此外,在某些情况下,当您的entrepid backend guy has将一个模型包装在一个数组中时,您必须使用Payload索引执行以下操作[0]

   parse: function (response, xhr) {
     if (_.isObject(response.Payload)) {
         return response.Payload[0];
     } else {
         return response;
     }
   }

答案 1 :(得分:1)

这应该有效(应该放入集合中):

parse: function (response) {
    return response.Payload;        
}

请参阅documentation。文档引用的Twitter Search API记录在案here。您获得的响应具有基本相同的结构:您获得一个对象,其中包含一个包含模型数组的字段。当调用ASMX Web服务时,相同的技术很有效,请参阅示例here