3

干杯! 例如我有三个模型:

App.Foo = DS.Model.extend({
  bars: DS.hasMany('App.Bar', {embedded:'always'}),
  bazes: DS.hasMany('App.Baz', {embedded:'always'})
});

App.Bar = DS.Model.extend({
  foo: DS.belongsTo('App.Foo')
});

App.Baz = DS.Model.extend({
  foo: DS.belongsTo('App.Foo)
});

以及像这样的适配器映射:

App.RESTSerializer = DS.RESTSerializer.extend({
  init: function() {
    this._super();

    this.map('App.Foo', {
      bars:{embedded: 'always'},
      bazes:{embedded: 'always'}
    })
  }
});

我首先在单独的事务中保存子记录(github.com/emberjs/data/pull/440):

barTransaction = App.store.transaction();
bar = barTransaction.createRecord(App.Bar);

//later
bazTransaction = App.store.transaction();
baz = bazTransaction.createRecord(App.Baz);

//later
fooTransaction = App.store.transaction();
foo = fooTransaction.createRecord(App.Foo);

//later
foo.get('bars').addObject(bar);
foo.get('bazes').addObject(baz);
fooTransaction.commit();

我只想知道是否可以通过一个 POST 请求保存父记录和所有子记录?现在它为每个子记录分别创建一个 POST 请求。

4

1 回答 1

2

我相信您的问题在于映射嵌入式记录的过时方式。这曾经发生在序列化程序中,但现在发生在适配器上的 map() 上......

您可以在此处查看集成测试:https ://github.com/emberjs/data/blob/master/packages/ember-data/tests/integration/embedded/embedded_saving_test.js#L50

我认为这些方面的东西会起作用:

App.Foo = DS.Model.extend({
  bars: DS.hasMany('App.Bar'),
  bazes: DS.hasMany('App.Baz')
});

App.Bar = DS.Model.extend({
  foo: DS.belongsTo('App.Foo')
});

App.Baz = DS.Model.extend({
  foo: DS.belongsTo('App.Foo')
});

App.Adapter = DS.RESTAdapter.extend({..configs..});

App.Adapter.map('App.Foo', {
  bars:{embedded: 'always'},
  bazes:{embedded: 'always'}
})

这应该POST在 api 处:api.com/foo并包括barsbazes

于 2013-03-01T03:31:21.143 回答