反序列化期间AngularJSRailsResource中的堆栈溢出

时间:2014-04-10 01:42:21

标签: ruby-on-rails angularjs angularjs-resource

由于数据的递归结构,在序列化期间我遇到了嵌套资源的问题。我使用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对象然后重新添加?或者在反序列化期间忽略它?

干杯。

0 个答案:

没有答案