我习惯了 Spine.js,但我想试试 Backbone.js。
在 Spine 中,没有集合。只有模型。在 Spine 中,当我在不同的地方使用模型时,Spine 在我更新它们时始终保持模型彼此同步。在 Backbone 中,我发现情况并非如此。我希望你能告诉我我做错了什么!
我正在尝试创建 2 个 Articles 集合,其中包含 3 个 Article 模型:
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/ 。他写:
动态记录
这只是一个疯狂的黑魔法,但它解决了我在使用 Backbone.js 时遇到的一个问题。假设您在应用程序的一个视图中获取了一条记录。然后,您在不同的视图中获取并更新同一条记录。在 Spine.js 中,两条记录都会更新。您不必担心使它们保持同步。当我读到这件事的那一刻,一滴眼泪从我的脸颊滚落。
我真的试图搜索这个但没有运气。
我希望你能指出我如何以 Backbone 方式执行此操作的正确方向!