【问题标题】:Parse Backbone Collection as Object, not Array将主干集合解析为对象,而不是数组
【发布时间】:2014-04-01 14:07:46
【问题描述】:

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

{
   "" : [{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 的数组,其中唯一的元素是 cmets 哈希。

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

【问题讨论】:

  • Backbone 集合希望将信息内部存储在一个数组中(内部存储为 .models),因此不清楚您在这里真正想要什么。每个 ID 属性是否映射到一个集合?默认情况下,主干模型需要对象哈希(内部存储为 .attributes),并且将数组分配为属性属性不会按您希望的方式工作。

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


【解决方案1】:

你可以覆盖collection.parse方法

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-21
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多