具有重复id的主干关系集合



我使用主干关系来处理集合。

我有一个复杂的对象,里面可能有重复的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就会愤怒地抛出异常,事情就不会发生。"复制id !"

我是否应该根据这些模型的指南生成某种假id ?或者是否有一种方法可以告诉主干关系存储停止执行此规则?也许我可以完全关闭商店。

我不会用它来做任何集合取回,取回关联,或类似的事情。我只是把它当作一种解析递归数据结构的好方法。

我在编写Jasmine测试时也经常遇到这个问题,但通过为每个测试添加随机*10乘数来确保id不同,从而设法解决了这个问题。但是不得不做这件事真让人讨厌。所以希望这里的任何修复都能帮助我进行单元测试。

我不反对尝试不同的框架,但是我的项目中的一些模型使用BBR,所以它需要发挥良好。如果有什么更合适的建议,也请提出来。

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

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

我最终的答案是转到骨干协会。在编写了一个d.ts文件(可在DefinitelyTyped存储库中获得)并进行了一些初始重构以更改关系块之后,事情很快就完成了!您需要记住的唯一一件事是,在模型的默认函数中将任何集合默认设置为空数组。希望这对大家有所帮助!

相关内容

  • 没有找到相关文章