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

How to add parent object to child in a one-to-may relationship in ember js

我在 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)

这些事情导致 parentchild 中没有任何内容,而 childparent 中没有任何内容。我也尝试了一些异步承诺解析,但没有成功。如果有人可以 post 一个如何管理这个的例子,那就太好了。

基本上这按您预期的那样工作。但是你有一些小错误:

  • 有时使用 child,有时使用 child-objectparent.
  • 也是如此
  • findRecordreturns一个PromiseObject。您可能想等待 promise 解决。
  • 不是addObject

你也可以从两边做。要么设置 parent:

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

或者你把child加到children:

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

也许看看 this twiddle