将Backbone Collection解析为Object,而不是Array

时间:2014-03-31 19:49:16

标签: javascript ruby-on-rails json backbone.js

我使用Backbone和Rails实现嵌套注释。我在服务器端的当前实现涉及存储parent_comment_id的注释模型(假设它们有一个)。当应用程序请求给定实体的注释时,我返回一个JSON对象,其中键是parent_comment_id,值是具有该id的父注释的注释数组。 E.g:

{
   "" : [{id: 1, content: "I'm an unnested comment, parent_comment_id: ""}],
   1  : [{id: 2, content: "I am nested under the comment with an id of 1", parent_comment_id: 1}, etc.],
   ...
} 

我目前遇到的问题是与Comments对应的Backbone集合返回一个长度为1的数组,其中唯一的元素是注释哈希。

如何通过Comments集合覆盖JSON响应的解析,以便返回的响应是JSON响应哈希而不是数组?

2 个答案:

答案 0 :(得分:1)

您可以覆盖collection.parse方法

答案 1 :(得分:0)

经过一些进一步的考虑,我认为最好的做法是将评论哈希的构造卸载到客户端。通过这样做,我可以继续将集合解析为预期的对象数组,然后通过在集合上调用以下方法来构建散列:

Jot.Collections.Comments = Backbone.Collection.extend({

  ...

  commentsByParent: function() {
    var commentsHash = {},
        key;

    this.models.forEach(function(c) {
      key = c.get('parent_comment_id');
      commentsHash[key] = commentsHash[key] || [];
      commentsHash[key].push(c);
    });

    return commentsHash;
  }

});