3

我有一个谷歌地图对象上的位置集合,存储在主干集合中:

var Location = Backbone.Model.extend({
    defaults: {
        latitute: "",
        longitude: "",
        visited: false;
    },
});

var LocationCollection = Backbone.Collection.extend({
    model: Location,
    url: 'api/locations'
});

在地图上单击每个点时,位置模型属性“已访问”设置为 true。

位置的原始集合来自数据库(基于地图的边界),它不存储任何“访问”信息,只是范围内的位置列表。

当用户通过移动、放大/缩小等更改谷歌地图的边界时,我需要在新参数中检索一个全新的位置列表,然后以某种方式将该列表与现有集合同化,添加新位置,但是为现有的保留访问过的属性?

我希望这不是太模糊,但是从哪里开始呢?jQuery 有没有办法将复杂对象从一个集合映射到另一个集合?或者拆分集合,将访问信息发送回服务器并在那里合并它们会更有意义吗?还是 Backbone 集合会记住“访问过”的值,并且只使用新属性更新集合中的值?

对不起,我以为我知道这些东西,但我从来没有做过这样的事情。

4

1 回答 1

2

这是可能的。基本上,我假设如下。用户有一堆位置。他们单击,位置属性更改为visited = true;

当他们缩小时,您fetch()现在在视图中的新模型但您也不希望那些旧位置重置为visited = false;服务器将基本上计算视图的尺寸并提供一堆位置模型。

如果这是您想要的,您需要做的就是fetch()使用以下选项拨打电话:add:true.

collection.fetch({
    add: true
});

当您将add:true选项传递给您的fetch()呼叫时,它不会重置集合(从而擦除您访问的数据)。相反,它只会添加集合中尚不存在的模型。因此,如果您已经有 locations.id = 1, 2, 3 并且您的服务器返回 locations.id = 1, 2, 3, 4, 5, 6 ... 只有 4, 5, 6 将添加到您现有的集合中. 1、2、3的visited = true(或false)数据应该保持不变。

于 2012-08-28T19:43:55.940 回答