2014-04-01 140 views
0

我有一個帳戶的JSON響應,基於此帳戶我將創建ModelA它將以用戶身份登錄。骨幹模型在初始化骨幹關係後被重寫

作爲id,emailid,trackingid,性別,customurl,mobile,picture_url和計劃ID的JSON響應。

此外,我有一個JSON響應,我正在創建ModelB,作爲ID,文本,描述,所有者{id,customurl和圖片url}的JSON響應。

我MODELA因爲這關係

relations : [ 
    { 
    type : Backbone.HasMany, 
    key : 'posts', 
    relatedModel : PostModel, 
    collectionType : AccountPosts, 
    reverseRelation : { 
     type : Backbone.HasOne, 
     key : 'account', 
     keySource : 'owner', 
     includeInJSON : false 
    } 
    } 
] 

創建後

post = new ModelB() 

的MODELA

currentUser = new ModelA() 

的實例和實例的問題是在當前用戶和信息發佈者是一樣的,currentUser屬性是c例如emailid和其他屬於郵件所有者的屬性都被刪除。

我在猜測主幹在內部創建每個模型的參考,因爲模型ID是相同的,第二個是在第一個上面。

如果我的猜測是正確的,我該如何避免currentUser對象被覆蓋,如果錯誤,這個問題的原因是什麼?

回答

0

當您使用骨幹關係reverseRelation它創建一個模型及其relatedModel一個雙向關係。如果你看Backbone Relational頁面上的Examples,他們給出了一個通過livesIn鍵在人和房屋之間使用reverseRelation的例子。當你更新關係的任何一方時,它將更新關係的兩邊。

在您的示例中,當您添加帖子是因爲與UserModel和Post有雙向關係時,指定「所有者」將導致現有UserModel(currentUser)也被更新。你會得到的是,當你的用戶帖子也會反映正確的帖子,無論何時你添加一個新的帖子到你認爲我想要的AccountPosts集合。

爲了讓您保留reverseRelation,如果您只想在帖子信息中查看特定的用戶屬性,您可以在includeInJSON屬性中指定這些屬性。

實施例是在此fiddle

// ModelB 
var PostModel = Backbone.RelationalModel.extend({ 
    defaults: { 
     'id': '', 
     'text': '', 
     'description': '', 
     'account': null 
    } 
}); 

// collection of ModelB 
var AccountPosts = Backbone.Collection.extend({ 
    model: PostModel 
}); 

// ModelA 
var UserModel = Backbone.RelationalModel.extend({ 
    defaults: { 
     'id': '', 
     'customurl': '', 
     'pictureurl': '', 
     'emailid': '', 
     'trackingid': '', 
     'gender': '', 
     'mobile': '', 
     'planid': '', 
     'posts': null 
    }, 

    relations: [ 
     { 
      type: Backbone.HasMany, 
      key: 'posts', 
      relatedModel: PostModel, 
      collectionType: AccountPosts, 
      reverseRelation : { 
       key : 'account', 
       includeInJSON: ['id', 'customurl', 'pictureurl'] 
      } 
     } 
    ] 
}); 

// json object returned from server request 
var accountJSON = { 
    id: 1, emailid: 22222, trackingid: 3333, gender: 'M', 
    customurl: 'www.myurl.com', mobile: '222-222-2222', 
    pictureurl: 'www.mypic.com', planid: 444 
}; 

var currentUser = new UserModel(accountJSON); 

// json object from server for posts 
var postJSON = { 
    id: 1, text: 'My First Post', description: 'A Post', 
    account: { id: 1, customurl: 'www.myurl.com', 
      pictureurl: 'www.mypic.com'} 
}; 

// example of just one post 
var post = new PostModel(postJSON); 

這JSON是結果

CURRENT USER JSON 
{"id":1,"emailid":22222,"trackingid":3333,"gender":"M","customurl":"www.myurl.com","mobile":"222-222-2222","pictureurl":"www.mypic.com","planid":444,"posts":[{"id":1,"text":"My First Post","description":"A Post","account":{"id":1,"customurl":"www.myurl.com","pictureurl":"www.mypic.com"}}]} 

POST JSON 
{"id":1,"text":"My First Post","description":"A Post","account":{"id":1,"customurl":"www.myurl.com","pictureurl":"www.mypic.com"}}