我在 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);
然后我尝试将它们绑定(bind)在一起,但我尝试的任何操作都失败了。例如:
parent.get('child').addObject(child) // or
parent.get('child').pushObject(child) // or
child.set('parent', parent)
这些事情导致parent
在child
中没有任何内容,并且child
在parent
中没有任何内容。我还尝试了一些异步 promise 解析,但没有成功。如果有人可以发布一个如何管理此问题的示例,那就太好了。
最佳答案
基本上这正如你所期望的那样工作。但你有一些小错误:
- 有时您使用
child
,有时使用child-object
。父级
也是如此。 findRecord
返回一个PromiseObject
。您可能想要等待 promise 解决。- 它不是
addObject
。
您也可以从两侧进行。设置父级:
this.store.findRecord('parent-object', 2).then(parent => {
const child = this.store.createRecord('child-object');
child.set('parent', parent);
});
或者将 child 添加到 child 中:
this.store.findRecord('parent-object', 2).then(parent => {
const child = this.store.createRecord('child-object');
parent.get('children').pushObject(child);
});
也许看看 this twiddle .
关于javascript - 如何在ember js中以一对多关系将父对象添加到子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43482657/