2013-03-17 73 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