【问题标题】:Using Ember Data's One to Many or Many to Many, how do you specify the relationship使用 Ember Data 的一对多或多对多,如何指定关系
【发布时间】:2014-10-08 07:31:01
【问题描述】:

我是使用 ember 数据的新手,我不清楚这些关系究竟如何链接到正确的记录:

例如,假设我有一个交易和收件人模型。该关系是与收件人的一对多交易。所以据我所知,我会有类似的东西:

models/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: ??
    }
  ]
});

models/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: ??
    }
  ]
});

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

感谢您的帮助。

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

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

    基本上,如果您使用 DS.hasMany() 在模型上声明其中一个属性,则模型将需要 ID 数组,而如果您使用 DS.belongsTo(),模型将希望您仅提供关联的 ID。

    编辑:Ember-data 期望您的数据几乎遵循此处描述的内容: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)。

    【讨论】:

    • 非常感谢您的帮助。但是,从您的示例中借用我仍然无法使记录匹配。我将整理一个 jsbin 并更新问题。希望在某个地方有一个可行的例子
    【解决方案2】:

    这是一个示例 jsbin,展示了 ember 数据关系映射的工作实现:

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

    我遇到的一个问题是我不理解在模板中我需要通过“语法”引用连接的表数据,例如,根据收件人 ID 连接收件人的事务数据行,您可以使用类似 @ 987654322@ 而不仅仅是把手文件中的 {{name}} 以输出连接的列。

    【讨论】:

      猜你喜欢
      • 2014-12-10
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 2018-06-15
      • 2021-04-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      相关资源
      最近更新 更多