假设我有两个模型,Book
和Chapter
。
App.Book = DS.Model.extend
name: DS.attr 'string'
chapters: DS.hasMany 'chapters', async: true
App.Chapter = DS.Model.extend
name: DS.attr 'string'
book: DS.belongsTo 'book', async: true
使用emberFire。
App.ApplicationAdapter = DS.FirebaseAdapter.extend
firebase: new Firebase('http://<my-firebase>.firebaseio.com/')
App.ApplicationSerializer = DS.FirebaseSerializer.extend()
根据the documentation on relationships,使用async: true
选项,Firebase会希望我的数据看起来如下所示。
{
'books': [{
'book_id_1': {
'name': 'Example',
'chapters': [{
'chapter_id_1': true
}]
}],
'chapters': [{
'chapter_id_1': {
'name': 'Chapter 1'
}
}]
}
我可以保存Chapter
就好了,但我似乎无法获得chapters
的{{1}}属性,其中填充了新创建的Book
。
在Chrome控制台中:
Chapter
上面的代码不按照我期望的方式var store = App.__container__.lookup('store:main')
store.find('book', 'book_id_1').then(function(b) { window.book = b });
var chapter = store.createRecord('chapter', { name: 'Chapter 1' });
chapter.save().then(function() { // Saves the chapter
book.get('chapters').then(function(chapters) {
chapters.addObject(chapter);
book.save(); // Doesn't append to the chapters object
}
});
保存chapters
属性。任何帮助将不胜感激。
将book
对象添加到chapter
属性的正确方法似乎是:
book.chapters
但是如果book.get('chapters').then(function(chapters) {
chapters.addObject(chapter);
book.save().then(function() {
chapter.save();
});
});
对象上存在验证错误,它将被添加到chapter
属性,但不会被保存(创建无效引用)。你怎么解决这个问题?
答案 0 :(得分:2)
Ember-Data有一个奇怪的细微差别,如果某个关系中的某个内容定义为hasMany
而相应的记录定义为belongsTo
,那么它只会发送属性belongsTo
{ {1}}。话虽如此,您需要致电chapter.save()
。我真的很讨厌这个,之前我曾经抱怨过,但是我一直懒得提交拉请求。