5

我一直在做一些研究,但没有看到我的具体用例的示例。因此,我们将不胜感激一般架构建议/资源。

我正在创建一个地址簿。

  • 用户创建联系人和组。
  • 创建的联系人存在于一个通用池中。
  • 联系人可以与多个组相关联。
  • 如果更新了联系人,则会在所有组中更新。
  • 如果从常规池中删除联系人,则会将其从所有关联组中删除。

为联系人和组创建单独的集合很容易,但现在我有点卡住了。

看来Backbone-associationsBackbone-relational甚至是nesting.js将提供我正在寻找的东西。看起来 Backbone-associations 比 Backbone-relational 性能更高。有人对任何插件有经验吗?有没有更简单的手工编码解决方案?

4

2 回答 2

1

你能有一个代表一个组和一个集合的主干模型吗?该组可以包含一个contactIds数组:

var Contact = Backbone.Model.extend({
    defaults: {
        name: "SomeName",
        phone: "1234567890",
        ...
    }
});

var Group = Backbone.Model.extend({
    defaults: {
       name: "someName",
       contactIds: [1, 2, 3, 4]
    }
});

var Contacts = Backbone.Collection.extend({
    model: Contact
});

如果您需要访问存储在给定组中的联系人的详细信息,您可以执行以下操作:

contacts.get(id); 

返回单个联系人的信息以进行 CRUD 操作。您可以类似地维护一组组。

于 2013-11-04T20:41:49.477 回答
1

首先,您应该尝试使用标准主干方法找到解决方案,并且只有在您不能解决的情况下 - 您应该采取辅助应用程序。

至于您的应用程序 - 有一个解决方案。您应该将联系人集合和组集合存储在两个不同的单独集合中。联系人集合中的每个模型都应该具有指向其组元素的“链接” - 例如仅包含其组模型的附加字段“组”(如果您知道,JavaScript 在您操作同一个对象时操作链接,因此它是轻量级的)

收集此类联系人后,您可以编写一个特殊的方法,该方法使用按组排序的此集合(为此实现集合比较器方法)并返回任何有用的对象进行渲染。例如:

{"group1": elements_of_group1, ...}

作为副作用,当您删除任何联系人时,您已经拥有一致的列表。

于 2013-01-19T14:06:59.573 回答