具有重复ID的Backbone关系集合

时间:2015-05-22 13:18:04

标签: backbone.js backbone-relational

我正在使用骨干关系来处理我的收藏。

我有一个复杂的对象,里面可能有重复的ID。 e.g。

<ScrollViewer>
    <StackPanel>
        <ListView>
            <ListView.View>
                <GridView>
                    <!-- Content -->
                </GridView>
            </ListView.View>
        </ListView>

    <!-- Filtering Controls -->
    </StackPanel>
</ScrollViewer>

然后我尝试将其用作关系集合,就像这样。 (用TypeScript编写)。

{
    id: "things/1",
    children: [
    {
        id: "things/2",
        children: [
        {
            id: "things/3",
            children: null
        }
        ]
    },
    {
        id: "things/4",
        children: [
        {
            id: "things/3",
            children: null
        }
        ]
    },
    ]
}

然而,只要我从服务器获得重复的ID,BBR就会愤怒地抛出异常而事情就不会发生。 “重复身份!”

我是否可能根据这些模型的guid生成某种假身份证?或者有没有办法告诉Backbone Relational商店停止执行此规则?也许我可以完全关掉商店。

我没有使用它来进行任何集合提取,获取相关内容或类似内容。我真的使用它作为解析递归数据结构的好方法。

我在编写Jasmine测试时经常遇到这个问题,但是设法通过为每个测试添加一个随机* 10乘法器来解决它,以确保id不同。但要做到这一点,这是一个痛苦的问题。所以希望这里的任何修复都能帮助我进行单元测试。

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我对此的最终回答是转移到Backbone Associations。在编写了一个d.ts文件(在DefinitelyTyped存储库中可用)和一些初始重构以更改关系块之后,事情几乎可以解决了!您唯一需要记住的是默认情况下将任何集合设置为模型的defaults函数中的空数组。希望这有助于某人!