Backbone 具有重复 ID 的关系集合

Backbone Relational collection with duplicate ids

我正在使用 backbone 关系来处理我的集合。

我有一个复杂的对象,里面可能有重复的 ID。例如

{
    id: "things/1",
    children: [
    {
        id: "things/2",
        children: [
        {
            id: "things/3",
            children: null
        }
        ]
    },
    {
        id: "things/4",
        children: [
        {
            id: "things/3",
            children: null
        }
        ]
    },
    ]
}

然后我尝试将其用作关系集合,就像这样。 (用 TypeScript 编写)。

constructor(options?) {
    // ...
    this.idAttribute = 'Id';
    this.relations = [{
        type: Backbone.HasMany,
        key: 'Children',
        relatedModel: 'Application.Models.MyModel',
        collectionType: 'Backbone.Collection'
    }
    ];
    super(options);
}

然而,一旦我从服务器获得重复的 id,BBR 就愤怒地抛出异常,但事情并没有发生。 "Duplicate id!"

我是否应该根据这些模型的 guid 生成某种假 ID?或者有没有办法告诉 Backbone 关系存储停止执行此规则?也许我可以完全关闭商店。

我没有使用它来执行任何集合提取、提取相关或类似的事情。我真的将它用作解析递归数据结构的好方法。

我在编写 Jasmine 测试时也经常 运行 遇到这个问题,但设法通过为每个测试添加一个 运行dom *10 乘法器来解决这个问题,以确保 ids是不同的。但不得不这样做是一件令人头疼的事情。所以希望这里的任何修复也能帮助我进行单元测试。

我不反对尝试不同的框架,但我项目中的一些模型使用 BBR,所以它需要很好地发挥作用。如果还有其他更合适的东西,请随时提出建议。

您的数据结构暗示了严格的树状关系,而数据显然不是这样组织的。要么让你的数据成为一棵真正的树,其中每个节点都是唯一的,要么用可以处理更复杂关系的结构来表示它。

我建议您将对象作为平面数组发送,其中每个节点都有一个 childrenIds 数组。然后你可以在收到对象后轻松恢复 children 数组。

我对此的最终回答是转到 Backbone Associations。在编写了一个 d.ts 文件(在 DefinitelyTyped 存储库中可用)和一些初始重构以更改关系块之后,一切都开始了!您唯一需要记住的是在模型的默认函数中将任何集合默认设置为空数组。希望这对某人有所帮助!