运输backbone.js模型?

时间:2011-10-04 01:01:43

标签: javascript json backbone.js

如果我JSON.stringify骨架模型与嵌套集合/模型,通过websockets发送到另一个骨干客户端和JSON.parse模式model = JSON.parse(model)变量模型将如何在其他客户端上工作?

2 个答案:

答案 0 :(得分:7)

没有

也许我会详细说明。当我这样做时:

var o = JSON.parse(JSON.stringify(model));

我在o中得到了一个简单的对象。为什么?好吧,首先,JSON.parse()对非基本类型(其中Array和Object被认为是原始类型)一无所知,特别是,它不知道Backbone模型是什么,所以它不能重建一。此外,JSON.stringify将在其参数上调用toJSON方法(如果它有一个当然)和Backbone supplies a toJSON,它只是将模型属性的副本作为简单(可能是嵌套的)对象返回。因此,一旦获得JSON.stringify(model)的输出,字符串和模型之间就没有连接,只需要一个普通的旧序列化JavaScript对象。

如果您想将Backbone模型从一个系统移动到另一个系统,我认为您必须自己跟踪所有模型类型和对象信息,然后在另一侧手动重建对象图的序列化部分。

最好将模型保存回其URL,将ID发送到其他Backbone客户端,然后像往常一样从模型的URL重新加载它。 JSON用于序列化数据,而不是对象,在将对象留给应用程序时解释数据。

答案 1 :(得分:2)

我知道脊椎为每个对象维护一个内部id,所以如果你像你建议的那样转移它们,我不知道如果没有冲突或重复cid的可能性它是如何工作的。

来自骨干网站:

  

模特的特殊属性,cid或客户端ID是唯一的   标识符在第一次时自动分配给所有模型   创建。当模型尚未保存到时,客户端ID很方便   服务器,并且还没有最终的真实ID   需要在UI中可见。客户端ID采用以下形式:c1,c2,c3   ...

编辑:

在读到“mu太短”之后,我同意他的回答,但是为了给他的评论添加一些解释,他留下了我发现非常有用的信息。因为backbone.js模型有一个toJSON()函数,当你调用JSON.stringify(model)时它没有像你期望的那样解析出所有属性,它只解析toJSON()方法返回的对象。 'mu太短'的优秀答案。

MDN Info JSON.stringify():https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify