我習慣了Spine.js,但我想嘗試一下Backbone.js。Backbone.js - 集合之間的「同步」模型
在脊椎中,沒有收藏。只有模型。在Spine中,當我在不同的地方使用模型時,Spine會在更新模型時始終保持模型同步。在Backbone中,我發現情況並非如此。我希望你能告訴我我做錯了什麼!
我想創建具有在他們裏面3個模型2個收藏:
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"
所以我的問題是...你怎麼在骨幹呢?你如何保持模型在集合之間同步?
我其實讀過這篇博客文章:http://destroytoday.com/blog/reasons-for-spinejs/。他寫道:
動態記錄
這一個很瘋狂的魔法,但它解決了我與Backbone.js的面對 問題。假設您在 應用的一個視圖中獲取了一條記錄。然後,您以不同的視圖獲取並更新相同的記錄。 在Spine.js中,兩條記錄都會更新。你不必擔心 保持同步。當我讀到這個消息時,一滴眼淚就從我的臉頰滑落下來。
我真的試過尋找這個,但沒有運氣。
我希望你能指出我正確的方向如何做到這一點骨幹的方式!
感謝您的回答!我希望它能夠融入Backbone。 :-( – agronemann
我建議不要採用第二種方法,根據我的經驗,這會導致意大利麪條和不一致。 – mor