1

restful api im 调用将所需的有效负载(模型)包装在“有效负载”中

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

注意:“this”是一个主干集合

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

rest api 的格式为 "{"Success":"true", ...., "Payload":[{model},{model},{model}], .... }

可以解释一下 collection.add(model) 的必要性吗

4

2 回答 2

2

问题是在 Collection fetch 期间,如果定义了每个模型的解析,它们也会被调用。并且很可能模型的解析函数在这种情况下定义:RESTful API 格式使用有效负载的包装器。

骨干文档

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

因此,您需要定义如下解析。请注意,“有效负载”是您的包装器的名称,无论是有效负载、数据、结果、

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

现在这条线索来自这个 SO 答案中的 nikoshr

此外,在某些情况下,当您勇敢的后端人员将模型包装在数组中时,您必须使用有效负载索引 [0] 执行以下操作

   parse: function (response, xhr) {
     if (_.isObject(response.Payload)) {
         return response.Payload[0];
     } else {
         return response;
     }
   }
于 2013-10-15T20:48:31.987 回答
1

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

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

请参阅文档。文档引用的 Twitter 搜索 API 记录在此处。您得到的响应具有基本相同的结构:您得到一个对象,其中包含一个包含模型数组的字段。当调用 ASMX Web 服务时,同样的技术效果很好,请参见此处的示例。

于 2013-10-11T23:59:17.373 回答