在Ember.js和emberFire中保存关系

时间:2014-04-05 03:27:50

标签: ember.js ember-data emberfire

假设我有两个模型,BookChapter

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属性,但不会被保存(创建无效引用)。你怎么解决这个问题?

1 个答案:

答案 0 :(得分:2)

Ember-Data有一个奇怪的细微差别,如果某个关系中的某个内容定义为hasMany而相应的记录定义为belongsTo,那么它只会发送属性belongsTo { {1}}。话虽如此,您需要致电chapter.save()。我真的很讨厌这个,之前我曾经抱怨过,但是我一直懒得提交拉请求。