假设我有两个模型,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()
根据有关关系的文档,使用该async: true
选项,Firebase 会期望我的数据如下所示。
{
'books': [{
'book_id_1': {
'name': 'Example',
'chapters': [{
'chapter_id_1': true
}]
}],
'chapters': [{
'chapter_id_1': {
'name': 'Chapter 1'
}
}]
}
我可以保存一个Chapter
就好了,但是我似乎无法获得chapters
一个Book
填充了新创建的Chapter
.
在 Chrome 控制台中:
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
,它将被添加到book.chapters
属性中但不会被保存(创建无效引用)。你如何解决这个问题?