通过Socket.io发送Backbone.js模型

基本问题
我想通过socket.emit()发送一个对象,但是对象没有被完全发送。 我可能只是误解如何做到这一点,但这里是例子:

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"}]]} 

它以后一种格式到达前端。

更多细节
我创build了一个尝试使用socket.io更新客户端骨干模型的服务器。 其中一些正在使用这里指定的想法:

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

不同之处在于我在后端创build了骨干模型。 我的逻辑是共享基本的模型文件,并在后端处理与持久层的通信并保持“真实”的数据源优化,然后响应请求来获取这些模型/集合以及自动推送更新。

一切似乎都在工作,但是我应该把模型转移到前端。 我是否需要扩展/覆盖到JSON或其他方法实际上转换为运输? 如果是这样,我该怎么做? 任何帮助,你可以给我将不胜感激!

我认为你应该只发送数据,并在客户端重新创build对象。

因此,您可以尝试使用Backbone Collection的toJSON

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

在发送之前使用JSON.stringify和反序列化与JSON.parse另一端

我讨厌回答我自己的问题,但我发现另一个问题的问题: 保存Backbone模型和集合到JSONstring

本质上,我没有意识到的是,toJSON()只返回模型的属性。 我的模型包含其他模型的集合,所以我需要覆盖到JSON()。

集合调用其子模型的toJSON()。 所以,我最终需要改变模型的JSON函数来返回属性和它们包含的模型的集合。

这是一个例子:

 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; } }); 

请注意,在我的示例中,不是返回模型的所有属性,而是返回属性“auctionId”。 这对我来说似乎更安全,因为这里的另一位开发人员可能以后添加不需要运输的属性。 也就是说,让returnObject的元素包含所有属性可能是更好的做法。 这只是使我在客户端重新构build模型变得容易一些。