Backbone.js 具有重复ID的主干关系集合
我使用关系主干来处理我的收集 我有一个复杂的对象,里面可能有重复的ID。e、 gBackbone.js 具有重复ID的主干关系集合,backbone.js,backbone-relational,Backbone.js,Backbone Relational,我使用关系主干来处理我的收集 我有一个复杂的对象,里面可能有重复的ID。e、 g { id: "things/1", children: [ { id: "things/2", children: [ { id: "things/3", children: null } ] }, { id: "things/4",
{
id: "things/1",
children: [
{
id: "things/2",
children: [
{
id: "things/3",
children: null
}
]
},
{
id: "things/4",
children: [
{
id: "things/3",
children: null
}
]
},
]
}
然后我尝试将其用作关系集合,如下所示。(用打字稿书写)
然而,一旦我从服务器上获得了重复的ID,BBR就会愤怒地抛出一个异常,事情就没有发生。“重复id!”
我是否应该根据这些模型的guid生成某种假id?或者有没有办法告诉主干关系存储停止执行此规则?也许我可以把商店全部关掉
我不会用它来做任何集合获取,获取相关数据,或者类似的事情。我真的把它当作解析递归数据结构的好方法
我在编写Jasmine测试时也经常遇到这个问题,但通过为每个测试添加一个随机*10的乘法器来确保ID是不同的,从而设法解决了这个问题。但不得不这样做是件很痛苦的事。所以希望这里的任何修复也能帮助我进行单元测试
我并不反对尝试不同的框架,但我的项目中的一些模型使用BBR,所以它需要很好地发挥作用。如果还有其他更合适的方法,也可以随意提出建议。您的数据结构意味着一种严格的树状关系,而数据显然不是这样组织的。要么使数据成为实际的树,其中每个节点都是唯一的,要么用能够处理更复杂关系的结构表示数据
我建议您将对象作为平面数组发送,其中每个节点都有一个
childrenIds
数组。然后,您可以在收到对象后轻松地恢复子数组。我最终的答案是移动到。在编写了一个d.ts文件(可在DefinitelyTypedRepository上获得)并进行了一些初始重构以更改关系块之后,事情基本上顺利完成了!您需要记住的唯一一件事是在模型的defaults函数中将所有集合默认设置为空数组。希望这对别人有帮助
constructor(options?) {
// ...
this.idAttribute = 'Id';
this.relations = [{
type: Backbone.HasMany,
key: 'Children',
relatedModel: 'Application.Models.MyModel',
collectionType: 'Backbone.Collection'
}
];
super(options);
}