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