Ember.js使用已有的子模型提交父模型 [英] Ember.js commiting parent model with already existing child models

查看:72
本文介绍了Ember.js使用已有的子模型提交父模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Cheers! For example I have three models:

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)
});

如下所示的适配器映射:

And adapter mappings like these:

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 ):

I'm saving child records first in separated transactions (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请求。

I just want to know if it possible to save parent and all child records with one POST request? For now it's creating one POST request for every child record separately.

推荐答案

我相信您的问题是以过时的方式映射嵌入式记录。这在串行器中发生,但现在正在适配器上的地图()上发生...

I believe your issue is with an outdated way of mapping embedded records. This used to happen in the serializer, but is now happening on a map() on the adapter...

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

You can see the integration test here: https://github.com/emberjs/data/blob/master/packages/ember-data/tests/integration/embedded/embedded_saving_test.js#L50

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

I think something along these lines will work:

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 ,并包含酒吧 bazes

This should POST to the api at: api.com/foo and include the bars and bazes

这篇关于Ember.js使用已有的子模型提交父模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆