由于数据的递归结构,在序列化期间我遇到了嵌套资源的问题。我使用AngularJS-Rails-Resource进行序列化。我不能这样标记这篇文章,因为我没有必要的声誉。该库的github仓库位于:https://github.com/FineLinePrototyping/angularjs-rails-resource
我有两个模特说,人和帽子。一个人有很多帽子,每个帽子属于一个人。
在我的情况下,我有一些特殊的帽子特定逻辑,需要帽子所属人员的详细信息。我使用coffeescript类封装了这个功能。
class Hat extends RailsResource
@configure
url: api + '/people/{{personId}}/hats/{{id}}'
name: 'hat'
label: ->
"#{person.name}'s #{hat.type}"
但是我在Person级别请求数据,所以当我请求Person.get()时,我需要初始化每个帽子的人,就像我的API一样,帽子只存储并序列化person_id / personId < / p>
.factory("Person", (railsResourceFactory, railsSerializer, api) ->
Person = railsResourceFactory
url: api + '/people',
name: 'person',
serializer: railsSerializer( ->
@resource "hats", "Hat"
)
# disclaimer: my actual code checks whether the response is an array and handles errors, but it's not relevant here.
Person.afterResponse (person) ->
hat.person = person for hat in person.hats
所以现在我的CoffeeScript类的Hat实例可以访问他们的人员以获得他们的标签功能。
但是,现在,在反序列化时,我会收到一个递归错误 帽子 - &gt;人 - &gt;帽子 - &gt;帽子 - &gt;人 - &gt; ......等等。
我尝试使用排除&#34; person&#34;在Hat的序列化程序中,除非我在AngularjsRailsResource库中更改了它,否则它没有做任何事情
Serializer.prototype.isExcludedFromDeserialization = function (attributeName) {
return false;
};
到此:
Serializer.prototype.isExcludedFromDeserialization = function (attributeName) {
return this.exclusions.hasOwnProperty(attributeName);
};
但我得到的印象是,这不是图书馆中的错误,而且它的行为与预期相符,我只是做错了。
我该如何处理?在反序列化之前是否有一种干净的方法从帽子中删除person对象然后重新添加?或者在反序列化期间忽略它?
干杯。