如果我使用嵌套集合/模型綁定骨幹模型,請通過websockets將其發送到其他骨幹客戶端和JSON.parse模式model = JSON.parse(model)
變量模型的工作方式與其他客戶端上的一樣嗎?運輸backbone.js模型?
回答
號
也許我會闡述。當我這樣做:
var o = JSON.parse(JSON.stringify(model));
我結束了一個簡單的對象o
。爲什麼?那麼,首先,JSON.parse()
不知道任何關於非基元類型(其中Array和Object被視爲原始類型),特別是它不知道Backbone模型是什麼,所以它不能重建它。此外,JSON.stringify
將在其參數(如果有的話)和Backbone supplies a toJSON
上調用toJSON
方法,該方法僅將模型屬性的副本作爲簡單(可能是嵌套的)對象返回。所以一旦你有從JSON.stringify(model)
的輸出,字符串和模型之間根本沒有連接,你只需要一個普通的舊的序列化的JavaScript對象。
如果您想將Backbone模型從一個系統移動到另一個系統,我認爲您必須自己跟蹤所有模型類型和對象信息,然後在另一側手動重建您的序列化對象圖片。
將模型保存回其URL,向另一個Backbone客戶端發送ID,然後像往常一樣從模型URL中重新加載它可能會更好。 JSON用於序列化數據,而不是對象,因爲對象留給應用程序解釋數據。
我知道backbone爲每個對象維護一個內部id,所以如果你像他們那樣轉移他們,我不知道如果沒有衝突或重複cid的可能性,它是如何工作的。
從骨幹網的網站:
的模型一個特殊性質,在CID或客戶端ID是自動分配到所有型號的唯一標識符 時,他們首先創建 。當模型尚未保存到服務器的 ,並且還沒有其最終的真實ID時,客戶端ID很方便,但在UI中必須已經顯示 。客戶ID的格式爲:C1,C2,C3 ...
編輯:
閱讀'畝太短的回答我對他的回答後達成一致,但一些交代給他加評論他留在下面,我發現非常豐富。由於backbone.js模型具有toJSON()函數,因此當調用JSON.stringify(model)時,它不會解析所有屬性,就像您期望的那樣,它只解析toJSON()方法返回的對象。 '畝太短'的優秀答案。
MDN信息JSON.stringify():https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify
但'cid'沒有出現在'JSON.stringify()'輸出中,Backbone的'toJSON()'只返回模型的屬性。所以你必須手工完成所有的序列化操作,然後在另一側清理模型類型和對象標識符以重建圖形。試着用你的一個Backbone模型做一個'console.log(JSON.parse(JSON.stringify(model)))',你會看到會發生什麼。 –
@ muistooshort很好的答案,並感謝JSON.stringify()信息。 –
- 1. 模型Backbone.js的
- 2. Backbone.js模型
- 3. Backbone.js模型(2)
- 4. Backbone.js Dyanamic模型
- 5. Backbone.js模型緩存
- 6. backbone.js複雜模型
- 7. 隱藏Backbone.js模型
- 8. Backbone.js模型帖子
- 9. Backbone.js驗證模型
- 10. 初始模型backbone.js
- 11. Backbone.js嵌套模型
- 12. 升級模型(backbone.js)
- 13. Backbone.js刪除模型
- 14. JSON到Backbone.js模型
- 15. backbone.js模型屬性undefined
- 16. Backbone.js模型驗證方法
- 17. Backbone.js收集多個模型
- 18. Backbone.js的 - 定義模型
- 19. Backbone.js + Spring MVC。保存模型
- 20. Backbone.js的模型urlRoot錯誤
- 21. Json在Backbone.js嵌套模型
- 22. Backbone.js中的嵌套模型
- 23. Backbone.js部分模型更新
- 24. Backbone.js:模型不出現
- 25. backbone.js 3路模型同步
- 26. 嵌套模型與Backbone.js的
- 27. Backbone.js和非模型對象
- 28. Backbone.js模型與視圖SET
- 29. Backbone.js驗證模型屬性
- 30. Backbone.js模型與集合
感謝您的好評。我正在通過websockets完成所有這些工作,所以我可能會設計一種方法來從原始數據重建狀態。 – fancy
@Lochlan:問題是關於將模型實例從一個地方複製到另一個地方。在一個地方,你將不得不'JSON.stringify(模型)'得到一個你可以發送到別處的字符串(JSON格式)。然後,在某個地方(或某個時間),您將用'JSON.parse'解壓該字符串。 –