如何使用ember-factory-guy生成依赖于其父级数据的子模型?

时间:2017-02-28 06:09:53

标签: ember.js ember-data

在子模型中生成数据的最佳方法是什么?取决于来自父级的数据?

我想要完成的两个具体例子:

  1. 我有两种类型的(一对一)链接模型,如果已链接,将从具有相同名称的API返回。因此,如果我创建一个具有给定名称的父对象,我希望孩子继承相同的名称

  2. 模型还有创建时间戳。儿童'时间戳应该是父母的加上一些三角洲,而孙子女的'应该是他们的父母("孩子"型号)加上一些额外的delta

  3. 所以,鉴于这些模型:

    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爆炸(即相关模型尚不可用)

    那么,应该怎么做呢?

0 个答案:

没有答案