Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 具有重复ID的主干关系集合_Backbone.js_Backbone Relational - Fatal编程技术网

Backbone.js 具有重复ID的主干关系集合

Backbone.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。e、 g

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