在子模型中生成数据的最佳方法是什么?取决于来自父级的数据?
我想要完成的两个具体例子:
我有两种类型的(一对一)链接模型,如果已链接,将从具有相同名称的API返回。因此,如果我创建一个具有给定名称的父对象,我希望孩子继承相同的名称
模型还有创建时间戳。儿童'时间戳应该是父母的加上一些三角洲,而孙子女的'应该是他们的父母("孩子"型号)加上一些额外的delta
所以,鉴于这些模型:
Parent = DS.Model.extend({
name: DS.attr('string'),
child: DS.belongsTo('child'),
createdAt: DS.attr('date')
})
Child = DS.Model.extend({
name: DS.attr('string'),
parent: DS.belongsTo('parent'),
children: DS.hasMany('grandchild'),
createdAt: DS.attr('date')
})
Grandchild = DS.Model.extend({
parent: DS.belongsTo('child'),
createdAt: DS.attr('date')
})
我尝试了两件事:
方法#1:对我在父工厂定义中嵌入的子属性哈希使用内联函数
// tests/factories/parent.js
FactoryGuy.define('parent', {
default: {
child: FactoryGuy.belongsTo('child', {
name: (parent) => parent.name,
createdAt: (parent) => new Date(parent.createdAt.getTime() + OFFSET),
grandchildren: FactoryGuy.hasMany('grandchild', {
createdAt: (child) => new Date(parent.createdAt.getTime() + OFFSET)
});
})
}
});
// tests/factories/child.js
FactoryGuy.define('child', {
default: {
grandchildren: FactoryGuy.hasMany('grandchild', {
createdAt: (child) => new Date(child.createdAt.getTime() + OFFSET)
});
}
});
我希望这些函数能够接收父对象,但是这似乎直接将函数指定为子对象上字段的值。
方法#2:访问inline functions
中的相关对象// tests/factories/child.js
FactoryGuy.define('child', {
default: {
name: (child) => child.parent.name,
createdAt: (child) => new Date(child.parent.createdAt.getTime() + OFFSET),
grandchildren: FactoryGuy.hasMany('grandchild')
}
});
// tests/factories/grandchild.js
FactoryGuy.define('grandchild', {
default: {
createdAt: (grandchild) => new Date(grandchild.parent.createdAt.getTime() + OFFSET)
}
});
这只是TypeError: Cannot read property 'createdAt' of undefined
爆炸(即相关模型尚不可用)
那么,应该怎么做呢?