2013-03-17 62 views
3

的jsfiddle - http://jsfiddle.net/9gA4y/1/Ember-Data。添加子記錄many2many&one2many

我有以下型號:

contact => (many2many) => tags 
contact => (one2many) => address 

灰燼數據模型:

App.Contact = DS.Model.extend({ 
    name: attr('string'), 
    tags: hasMany('App.Tag'), 
    addresses: hasMany('App.Address') 
}); 

App.Address = DS.Model.extend({ 
    street: attr('string'), 
    country: attr('string'), 
    contacts: belongsTo('App.Contact') 
}) 
App.Tag = DS.Model.extend({ 
    name: attr('string'), 
    contacts: hasMany('App.Contact') 
}); 

我想通了,增加新的接觸記錄

  • 如何將現有地址與新創建的聯繫人相關聯。 (一個2很多)
  • 如何將現有標籤與新創建的聯繫人相關聯。 (許多2個很多)
  • 如何刪除現有聯繫人中的關聯。

回答

5

hasMany關係可以通過addObjectaddObjectsremoveObject進行操作。

contact.get('addresses').pushObject(address); 
contact.get('addresses').removeObject(address); 

您還可以設置該地址

address.set('contact', contact); 
address.set('contact', null); 

而且接觸,你注意,你應該使用一個屬於關聯關聯的單數形式(contactcontacts):

App.Address = DS.Model.extend({ 
    street: attr('string'), 
    country: attr('string'), 
    contact: belongsTo('App.Contact') 
}); 
3

嘗試:

var contact = App.Contact.find(1), 
    address = App.Address.find(1), 
    tag = App.Tag.find(1); 

contact.get('addresses').addObject(address); 
contact.get('tags').addObject(tag); 

this.get('store').commit(); //saves address and tag to contact 

contact.get('tags').removeObject(tag); 

this.get('store').commit(); //removes tag from contact 
相關問題