2014-10-06 69 views
0

我是新的,我不清楚在究竟是如何的关系,实际上是链接到正确的记录:使用灰烬数据的一对多或多对多,如何指定使用烬数据的关系

例如

比方说,我有一个交易和收件人模型。这种关系对于收件人来说是一对多的交易。所以我按照我的理解我会类似于:

型号/ transaction.js

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    recipient: DS.belongsTo('recipient'), 
    date: DS.attr('date'), 
    amount: DS.attr('string') 
}).reopenClass({ 
    FIXTURES: [ 
    { 
     id: '1', 
     date: '2014/10/06', 
     recipient: ?? 
    } 
    ] 
}); 

型号/ recipient.js

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    transactions: DS.hasMany('transaction') 
}).reopenClass({ 
    FIXTURES: [ 
    { 
     id: '1', 
     name: 'Kurt', 
     transactions: ?? 
    } 
    ] 
}); 

所以我的问题是你如何申报其交易记录属于哪个特定的收件人记录?

感谢您的任何帮助。

回答

1

我相信这已经得到了回答,但我找不到在这里引用它的问题,但我不得不与此争斗一段时间。

基本上,如果你有DS.hasMany()在模型声明属性的一个模型会期待和ID的同时阵列如果使用DS.belongsTo()模型会希望你只提供相关的ID。

编辑:灰烬数据期待您的数据非常关注你的描述如下:http://jsonapi.org/

所以,在你的榜样,你应该是这样的:

// models/transaction.js 

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    recipient: DS.belongsTo('recipient', {async:true}), 
    date: DS.attr('date'), 
    amount: DS.attr('string') 
}).reopenClass({ 
    FIXTURES: [ 
    { 
     id: '1', 
     date: '2014/10/06', 
     recipient: 1 
    } 
    ] 
}); 


//models/recipient.js 
import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    transactions: DS.hasMany('transaction', {async:true}) 
}).reopenClass({ 
    FIXTURES: [ 
    { 
     id: '1', 
     name: 'Kurt', 
     transactions: [1] 
    } 
    ] 
}); 

请注意,我说的{async:true}选项散列到关系声明中,这将使您的路由能够在将模型呈现给控制器之前异步获取关系的内容(请参阅:http://emberjs.com/api/data/#method_hasMany)。

+0

非常感谢您的帮助。然而,从你的例子中借用我仍然无法获得匹配的记录。我打算组装一个jsbin并更新问题。希望在那里有一个工作的例子 – micahblu 2014-10-07 21:19:54

0

下面是一个示例jsbin显示在行动烬数据关系映射的工作实现:

http://jsbin.com/jihota/3/edit?html,js,output

一个我有不理解的问题,在模板我需要引用连接表数据通过“语法”,例如,基于收件人ID加入收件人的交易行数据,您可以在handlebars文件中使用类似{{recipient.name}}而不是{{name}}的内容来输出该加入的列。