jquery - 将主干集合/javascript 对象与来自服务器的新模型相结合

标签 jquery asp.net-mvc-3 backbone.js underscore.js

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

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

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

当单击 map 上的每个点时,位置模型属性“visited”将设置为 true。

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

当用户通过移动、放大/缩小等方式更改 Google map 的边界时,我需要在新参数中检索全新的位置列表,然后以某种方式将该列表与现有集契约(Contract)化,添加新位置,但保留现有位置的已访问属性?

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

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

最佳答案

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

当它们缩小时,您fetch()现在可见的新模型,但您也不希望这些旧位置重置为visited = false; 服务器基本上会计算 View 的尺寸并提供一堆位置模型。

如果这是您想要的,您所需要做的就是使用以下选项进行 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)数据应该保持不变。

关于jquery - 将主干集合/javascript 对象与来自服务器的新模型相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12165992/

相关文章:

asp.net-mvc - 帮助解决 MVC 身份验证/授权解决方案

javascript - 如何检测页面中使用的 JS 框架/库?

javascript - 哪个更快?按ID选择,还是按索引选择?

javascript - Backbone 和下划线 - 模板化一个简单的 View

php - jQuery id 选择器在有 .在身份证

c# - 如何在 ASP.NET MVC3 中通过 HTTPS 提供静态文件(在 ~/Content 中)

javascript - 使用knockoutjs将url内容加载到div上

javascript - 通过 Javascript 调用 Controller 操作

javascript - 包含数据库中相关信息的打开模式

javascript - jQuery:在 JSON 中混合字符串和 Javascript 对象列表