在同一个提交中创建父模型和子模型

时间:2013-03-16 17:42:13

标签: ember.js ember-data

我有以下型号:

App.Offers = DS.Model.extend({
   name: DS.attr('string'),            
   createdBy: DS.belongsTo('App.Users'),
   products: DS.hasMany('App.Products'), 
   startDate: DS.attr('string'),
   endDate: DS.attr('string')
}

App.Products = DS.Model.extend({
    description: DS.attr('string'),
    img: DS.attr('string'),
    offer: DS.belongsTo('App.Offers'),
}

使用这两个模型,我创建了一个offer(父)和一个product(child):

var offer = App.Offers.createRecord({/*fields*/}),
    product = App.Products.createRecord({/*fields*/});
offer.get('products').pushObject(product);
offer.get("store").commit();

当我这样做时,问题是父母需要孩子的id而孩子需要父母的id来设置它的FK。

我在ember-data repo中查找了问题和PR,我发现了这个:https://github.com/emberjs/data/pull/440。它建议在一个waitForParents函数中包装createRecord,该函数基本上创建父项,然后创建子项。虽然我已经尝试了他们的建议但我仍然无法创建我的记录。问题是,即使首先发出对父项的请求,它仍然需要子项的id(尚未创建)。使用以下有效负载发送父请求:

{/*other_fields*/,"products":["/api/v1/products//"]}

请注意网址中产品的缺失ID。

1 个答案:

答案 0 :(得分:0)

我设法通过遵循此PR中的建议来修复它:https://github.com/emberjs/data/issues/437。他们基本上建议创建一个waitForParents函数并将其包装在createRecord周围。此函数检查是否存在belongsTo关系并推迟该创建的代码执行,直到创建父代(通过向id字段添加观察者)。

在我的情况下,我不得不在序列化器中覆盖addHasMany。

我希望能帮助其他人解决同样的问题。