2012-04-12 60 views
1

基本問題
我想通過socket.emit()發送一個對象,但對象沒有被完全發送。我可能只是誤會如何做到這一點,但這裏的例子:通過Socket.io發射Backbone.js模型

console.log(object) 

的結果

{ length: 8, 
    models: 
    [ { attributes: [Object], 
     _escapedAttributes: {}, 
     cid: 'c1', 
     changed: {}, 
     _silent: {}, 
     _pending: {}, 
     _previousAttributes: [Object], 
     lots: [Object], 
     _changing: false, 
     collection: [Circular], 
     _callbacks: [Object] }, 
    ... ETC 

雖然

socket.emit(e,object); 

的結果:

{"name":"read:AllAuctions","args": 
[[{"auctionId":"298"},{"auctionId":"381"},{"auctionId":"385"}, 
{"auctionId":"393"},{"auctionId":"394"},{"auctionId":"395"}, 
{"auctionId":"402"},{"auctionId":"800"}]]} 

它到達前端後者格式。

進一步詳細地
我已經創建了一個嘗試更新使用socket.io客戶端主幹模型的服務器。還有一部分是用在此處指定的想法:

http://developer.teradata.com/blog/jasonstrimpel/2011/11/backbone-js-and-socket-io

不同的是,我已經創建的後端骨幹機型。我的邏輯是共享基本模型文件,並讓後端處理與持久層進行通信並保持「真實」數據源優化,然後響應請求來獲取這些模型/集合以及自動推送更新。

一切似乎都在工作,但是我應該將模型轉移到前端。我是否需要擴展/覆蓋到JSON或其他實際將其轉換爲傳輸的方法?如果是這樣,我該怎麼做?任何幫助,你可以給我將不勝感激!

回答

0

我不想回答我的問題上,另一端反序列化,但我發現在另一個問題的問題: Saving Backbone model and collection to JSON string

本質上,我沒有意識到的是,toJSON()只返回模型的屬性。我的模型包含其他模型的集合,所以我需要覆蓋到JSON()。

集合調用其子模型的toJSON()。所以,我最終需要改變模型的JSON函數來返回它們包含的屬性和模型集合。

這裏的例子:「auctionId」

var Auction = Backbone.Model.extend({ 
    defaults: { 
    auctionId : null 
    }, 
    toJSON : function() { 
    var returnObject = {}; 
    returnObject["auctionId"] = this.get("auctionId"); 
    returnObject["lots"] = this.lots; 
    return returnObject; 
    }, 
    initialize : function() { 
    this.lots = new Lots; 
    } 
}); 

請注意,我的例子,而不是返回模型的所有屬性,我只是在屬性這對我來說似乎更安全,因爲這裏的另一位開發人員可能會在後面添加不需要傳輸的屬性。話雖如此,讓returnObject的元素包含所有屬性可能是更好的做法。這只是讓我在客戶端重新構建模型更容易一些。

1

我想你應該只發送數據並在客戶端重新創建對象。

爲此,你可以嘗試使用骨幹收集的toJSON

socket.emit(e, object.toJSON()); 
+0

我認爲這可能也是問題,但它也是一樣的。是否有機會我需要覆蓋該集合的toJSON方法以確保它也返回每個子模型的完整主體?我試過了,但我可能做錯了,因爲它返回了相同的東西。 – NateDSaint 2012-04-13 20:00:32

+1

感謝您的幫助!事實證明,套接字已經試圖使用toJSON對其進行編碼,但是我的toJSON函數只返回集合中模型的屬性。 – NateDSaint 2012-04-16 15:22:44

1

發送使用前JSON.stringify與JSON.parse

+0

我得到同樣的問題。複雜對象變成集合中每個模型上的一個屬性的name:value對的數組。 – NateDSaint 2012-04-16 14:39:39

+0

感謝您的幫助!我沒有意識到JSON只返回一個準備好JSON字符串的對象。 – NateDSaint 2012-04-16 15:22:02