如何在ember js中以一对一的关系将父对象添加到子对象

时间:2017-04-18 21:40:19

标签: javascript ember.js ember-data

我在ember.js中有两个模型,它们具有一对一的关系。现在我想创建一个新的子对象,并需要分配一个关联的父对象。我无法弄清楚如何做到这一点。我的模型使用以下代码定义:

父对象模型

import DS from 'ember-data';

export default DS.Model.extend({
    name: DS.attr('string'),
    children: DS.hasMany('child')
});

子对象模型

import DS from 'ember-data';

export default DS.Model.extend({
    name: DS.attr('string'),
    parent: DS.belongsTo('parent')
});

在路径的model() - 方法中创建子对象。

var child = this.store.createRecord('child');

然后查询父对象。

var parent = this.findRecord('parent', 2);

然后我试着将它们绑在一起,但是我尝试失败了。例如:

parent.get('child').addObject(child) // or
parent.get('child').pushObject(child) // or
child.set('parent', parent)

这些事情导致parent childchild中没有任何内容parent中没有任何内容。我也做了一些尝试,异步承诺解决但没有成功。如果有人可以发布一个如何管理它的例子,那就太好了。

1 个答案:

答案 0 :(得分:1)

基本上这可以按预期工作。但是你有一些小错误:

  • 有时您使用child,有时使用child-object。同样适用于parent
  • findRecord返回PromiseObject。您可能希望等待承诺解决。
  • 不是addObject

你也可以从两边做到。设置父级:

this.store.findRecord('parent-object', 2).then(parent => {
  const child = this.store.createRecord('child-object');
  child.set('parent', parent);
});

或者您将孩子添加到孩子:

this.store.findRecord('parent-object', 2).then(parent => {
  const child = this.store.createRecord('child-object');
  parent.get('children').pushObject(child);
});

也许请查看this twiddle