如何使用store.createRecord()传递hasMany关系的ID?

时间:2017-03-22 23:47:22

标签: ember.js ember-data

假设我有以下型号:

// customer.js
DS.Model.extend({
  products: DS.hasMany('product')
});

// product.js
DS.Model.extend({
 customer: DS.belongsTo('customer')  
});

我需要创建一个客户,其中包含ID(尚未从后端加载)的产品列表,其中包含以下内容:

this.get('store').createRecord('customer', {products: [1, 2, 3]});  

但这失败了,因为商店希望产品是DS.Model数组:

  

处理路由时出错:index断言失败:所有元素   您传递的是hasMany关系必须是DS.Model的实例   [1,2,3]

如何使用ID提供的关联创建记录?

2 个答案:

答案 0 :(得分:1)

  

处理路由时出错:index断言失败:所有元素   您传递的是hasMany关系必须是DS.Model的实例   [1,2,3]错误

由于错误表明您需要传递DS.Model的实例,但您只能使用createRecord创建实例,因此您可能需要执行以下操作,

    let product1 = this.store.createRecord('product',{customer:1});
    let product2 = this.store.createRecord('product',{customer:2});    
    return this.get('store').createRecord('customer', {products:[product1,product2]});

答案 1 :(得分:1)

如果相关记录不存在,则无法仅使用ID动态创建它们。但是,您可以这样做:

let customer = this.store.createRecord('customer', {});
customer.get('products').then(function() {
    customer.get('products').addObject(this.store.createRecord('product', {/* ... */}));
});