Javascript 主干模型在初始化主干关系后被覆盖

Javascript 主干模型在初始化主干关系后被覆盖,javascript,backbone.js,backbone-relational,Javascript,Backbone.js,Backbone Relational,我有一个帐户的JSON响应,我正在基于该帐户创建ModelA,该帐户将被用户登录 JSON响应为id、emailid、trackingid、性别、customurl、手机、图片url和计划id 此外,我还有一个post的JSON响应,我正在其上创建ModelB,JSON响应为id、text、description、owner{id、customurl和picture url} 我的ModelA就是这种关系 relations : [ { type : Backbone.HasMany

我有一个帐户的JSON响应,我正在基于该帐户创建ModelA,该帐户将被用户登录

JSON响应为id、emailid、trackingid、性别、customurl、手机、图片url和计划id

此外,我还有一个post的JSON响应,我正在其上创建ModelB,JSON响应为id、text、description、owner{id、customurl和picture url}

我的ModelA就是这种关系

relations : [
  {
    type : Backbone.HasMany,
    key : 'posts',
    relatedModel : PostModel,
    collectionType : AccountPosts,
    reverseRelation : {
      type : Backbone.HasOne,
      key : 'account',
      keySource : 'owner',
      includeInJSON : false
    }
  }
]
我创建了ModelA的一个实例

currentUser = new ModelA()
职位及职位实例

post = new ModelB()
问题是,当当前用户和帖子所有者相同时,currentUser属性将更改,即emailid和帖子所有者中不存在的其他属性将被删除

我猜主干会在内部创建每个模型的引用,因为模型id相同,所以第二个在第一个之上


如果我的猜测是正确的,我如何避免覆盖currentUser对象?如果错误,该问题的原因是什么?

当使用主干关系反向关联时,它会创建与模型及其关联模型的双向关系。如果您查看主干关系页面上的,他们给出了一个通过livesIn键在人和房子之间使用反向关联的示例。当您更新关系的任何一方时,它将更新关系的双方

在您的示例中,由于与UserModel和post存在双向关系而添加post时,指定“所有者”将导致现有UserModel(currentUser)也被更新。你会得到的是,当你向AccountPosts集合中添加新的帖子时,currentUser posts也会反映正确的帖子,我假设你会想要

因此,如果您只想在posts信息中看到特定的用户属性,那么可以在includeInJSON属性中指定这些属性,以保持反向关系

例子就在这里

//ModelB
var PostModel=Backbone.RelationalModel.extend({
默认值:{
“id”:“,
“文本”:“,
“描述”:“,
“帐户”:空
} 
}); 
//模型B集合
var AccountPosts=Backbone.Collection.extend({
模型:后模型
});  
//莫德拉
var UserModel=Backbone.RelationalModel.extend({
默认值:{
“id”:“,
'自定义URL':'',
“pictureurl”:“,
“emailid”:“,
“trackingid”:“,
“性别”:“,
“手机”:“,
“planid”:“,
“posts”:null
},
关系:[
{
类型:Backbone.HasMany,
关键:“职位”,
相关模型:后模型,
集合类型:AccountPosts,
反向关联:{
关键字:'帐户',
includeInJSON:['id','customurl','pictureurl']
}  
}
]
}); 
//从服务器请求返回的json对象
var accountJSON={
id:1,emailid:22222,trackingid:3333,性别:“M”,
customurl:'www.myurl.com',手机:'222-222-2222',
图片:www.mypic.com,planid:444
}; 
var currentUser=新用户模型(accountJSON);
//来自POST服务器的json对象
var postJSON={
id:1,文本:“我的第一篇帖子”,描述:“一篇帖子”,
帐户:{id:1,customurl:'www.myurl.com',
pictureurl:'www.mypic.com'}
};  
//一篇文章的例子
var post=新的PostModel(postJSON);
这就是结果

当前用户JSON
{“id”:1,“emailid”:22222,“trackingid”:3333,“性别”:“M”,“customurl”:“www.myurl.com”,“mobile”:“222-222-2222”,“pictureurl”:“www.mypic.com”,“planid”:444,“posts”:[{“id”:1,“text”:“我的第一篇帖子”,“描述”:“一篇帖子”,“账户”:{“id”:1,“customurl”:“www.myurl.com”,“pictureurl”:“www.mypic.com”}}]
PostJSON
{“id”:1,“文本”:“我的第一篇文章”,“描述”:“一篇文章”,“帐户”:{“id”:1,“自定义URL”:“www.myurl.com”,“图片库”:“www.mypic.com”}