宁静的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(模型)
的需求答案 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。