2012-04-12 57 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