我正在尝试使用MongoDB后端构建Ember应用程序。 Ember-data现在支持嵌入式对象,这使得能够将对象从嵌套文档中拉出来真的很容易和很棒。
我的问题在于弄清楚如何将对象相互关联。
让我们看一下有学生和作业的课堂示例。
{
students: [
{ name: 'Billy' },
{ name: 'Joe' }
],
assignments: [
{ name: 'HW1', score: 70, student_name: 'Billy' },
{ name: 'HW2', score: 80, student_name: 'Billy' },
{ name: 'HW1', score: 60, student_name: 'Joe' },
{ name: 'HW2', score: 75, student_name: 'Joe' }
]
}
我如何为student
建立关系,以便我可以撤回所有assignments
?
相关,我试图弄清楚如何关联彼此嵌套的对象。我创建了一个jsbin试图建立嵌套对象之间的关系(向上而不是向下),但我不知道该怎么做。
答案 0 :(得分:0)
您可以使用下面的repo来指导您如何进行嵌入式关联。虽然他们没有使用mongodb,但重要的是在ember-data方面,他们正在进行嵌入式关联。
请注意,此处App.PhoneNumber嵌入在App.Contact中。但它应该让你知道如何解决你的问题。
App.Contact = DS.Model.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string'),
email: DS.attr('string'),
notes: DS.attr('string'),
phoneNumbers: DS.hasMany('App.PhoneNumber'),
});
App.PhoneNumber = DS.Model.extend({
number: DS.attr('string'),
contact: DS.belongsTo('App.Contact')
});
https://github.com/dgeb/ember_data_example/blob/master/app/assets/javascripts/store.js
App.Adapter = DS.RESTAdapter.extend({
bulkCommit: false
});
App.Adapter.map('App.Contact', {
phoneNumbers: {embedded: 'always'}
});
App.Store = DS.Store.extend({
revision: 12,
adapter: App.Adapter.create()
});
App.ContactEditController = Em.ObjectController.extend({
needs: ['contact'],
startEditing: function() {
// add the contact and its associated phone numbers to a local transaction
var contact = this.get('content');
var transaction = contact.get('store').transaction();
transaction.add(contact);
contact.get('phoneNumbers').forEach(function(phoneNumber) {
transaction.add(phoneNumber);
});
this.transaction = transaction;
},
save: function() {
this.transaction.commit();
},
addPhoneNumber: function() {
this.get('content.phoneNumbers').createRecord();
},
});