我使用主干关系来处理集合。
我有一个复杂的对象,里面可能有重复的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存储库中获得)并进行了一些初始重构以更改关系块之后,事情很快就完成了!您需要记住的唯一一件事是,在模型的默认函数中将任何集合默认设置为空数组。希望这对大家有所帮助!