【问题标题】:Backbone Relational collection with duplicate ids具有重复 ID 的主干关系集合
【发布时间】:2015-05-22 13:18:04
【问题描述】:

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

我有一个复杂的对象,里面可能有重复的 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!”

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

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

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

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

【问题讨论】:

    标签: backbone.js backbone-relational


    【解决方案1】:

    您的数据结构意味着严格的树状关系,而数据显然不是这样组织的。要么使您的数据成为一个实际的树,其中每个节点都是唯一的,要么用可以处理更复杂关系的结构来表示它。

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

    【讨论】:

      【解决方案2】:

      我对此的最终回答是转到Backbone Associations。在编写了一个 d.ts 文件(可在 DefinitiveTyped 存储库中获得)并进行了一些初始重构以更改关系块之后,事情几乎可以顺利完成!您需要记住的唯一一件事是在模型的默认函数中将所有集合默认设置为空数组。希望这对某人有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-25
        • 1970-01-01
        • 2012-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多