collections - Backbone.js - "Syncing"集合之间的模型

标签 collections backbone.js model synchronization

我已经习惯了 Spine.js,但我想尝试一下 Backbone.js。

在 Spine 中,没有集合。只有模型。在Spine中,当我在不同的地方使用模型时,Spine总是在更新模型时保持模型彼此同步。在 Backbone 中,我发现情况并非如此。我希望你能告诉我我做错了什么!

我正在尝试创建 2 个文章集合,其中包含 3 个文章模型:

var Article = Backbone.Model.extend({});

var Articles = Backbone.Collection.extend({
  model: Article,
  localStorage: new Backbone.LocalStorage("Articles")
});

var articles1 = new Articles();
var articles2 = new Articles();

articles1.create({ id: 1, name: "Article 1" });
articles1.create({ id: 2, name: "Article 2" });
articles1.create({ id: 3, name: "Article 3" });

在 Chrome 中,我使用控制台并进行了一些实验:

articles1.size()
=> 3
articles2.size()
=> 0
articles2.fetch()
=> undefined
articles2.size()
=> 3

到目前为止一切顺利。两个集合中的第一篇文章是“第 1 条”:

a1 = articles1.first()
=> child
a2 = articles2.first()
=> child
a1.get("name")
=> "Article 1"
a2.get("name")
=> "Article 1"

但是当我尝试更新第一个集合中的模型时,它与第二个集合不同步:

a1.set({ name: "Article 1 - Updated" })
=> child
a1.save()
=> undefined
a1.get("name")
=> "Article 1 - Updated"
a2.get("name")
=> "Article 1"

我希望第二个集合中的模型能够自动更新。

但我可以看到两个文章模型都有不同的 cid:

a1.cid
=> "c0"
a2.cid
=> "c3"

所以我的问题是...你在 Backbone 做什么?如何保持模型在集合之间同步?

我实际上读过这篇博客文章:http://destroytoday.com/blog/reasons-for-spinejs/ 。他写道:

Dynamic Records

This one is just crazy black magic, but it solves a problem I faced with Backbone.js. Let’s say you fetched a record in one view of the app. Then you fetch and update that same record in a different view. In Spine.js, both records will update. You don’t have to worry about keeping them in sync. The moment I read about this, a single tear rolled down my cheek.

我确实尝试过搜索此内容,但没有运气。

我希望您能为我指明如何以 Backbone 方式执行此操作的正确方向!

最佳答案

您有 2 个基本选项:

  1. 确保两个集合都包含对完全相同的模型实例的引用。不仅仅是具有相同 ID 的 2 个对象,而且实际上是该记录的相同内存中单个模型实例。

  2. 使用事件绑定(bind)尝试使集合或集合内的模型保持同步(在集合 1 上添加/删除/更改/重置反过来会导致在集合 2 上添加/删除/更改/重置)。

如果你想要脊柱行为,让#1工作。也许使用实例缓存as described here .

关于collections - Backbone.js - "Syncing"集合之间的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12486053/

相关文章:

javascript - Backbone DOM 元素的 Backbone 事件未触发

ruby-on-rails - Rails 验证虚拟属性

list - 如何扩展 Scala 列表以启用不是按显式位置而是按给定谓词/条件的切片

java - 如何在Web服务中使用HashMap作为参数

javascript - 如何设置 Backbone 模型值而不延迟?

javascript - 通过backbone.js 路由区分后退/前进导航

ruby-on-rails - 从 Rails 中的模型对象中调用访问器方法

asp.net - 使用 asp.net mvc 管理模型类中的 session 变量

java - 在 map 中存储带有日期的对象组

java - 在Java中以恒定的时间用另一个列表替换子列表