store.find in Ember Model(DS)

时间:2014-11-05 05:48:44

标签: ember.js ember-data

所以目前我有

App.Mail = DS.Model.extend({
  name: DS.attr('string'),
  place: DS.attr('string'),
  note: DS.attr('string')
});


App.Envelope = DS.Model.extend({
  color: DS.attr('string'),
  weight: DS.attr('string'),
  name: DS.attr('string'),
  mail: this.store.find('mail',{'name':this.get('name')})
});

我正在寻找上述功能,以便在我的模板中

{{#each envelope in envelopes}}
  {{content.envelope.mail.note}}
{{/each}}

那么它会为每个循环中的每封邮件打印正确的注释吗?

我不确定我是否接近这个权利..但我不知道如何获得此功能。谢谢!B'/ P>

2 个答案:

答案 0 :(得分:0)

您可以将mail属性设置为hasMany关系。

App.Envelope = DS.Model.extend({
  color: DS.attr('string'),
  weight: DS.attr('string'),
  name: DS.attr('string'),
  mail: DS.hasMany('mail', {async:true}) 
});

如果您需要网址为/mails?name=personsname,最简单的路线就是使用原始信封回复中的链接

{
  envelopes: [
    {
      id: 1,
      name: 'foo',
      color: 'green',
      weight: '12oz',
      links: {
        mail: '/mails?name=foo'
      }
    }
  ]
}

如果您不想沿着这条路走下去,可以创建一个自定义适配器:How do you create a custom adapter for ember.js?

您的模板看起来像这样:

{{#each mail in mails}}
  {{mail.note}}
{{/each}}

答案 1 :(得分:0)

我认为你最好利用DS.belongsTo和DS.hasMany

App.Mail = DS.Model.extend({
    envelope: DS.belongsTo('envelope'),
    name: DS.attr('string'),
    place: DS.attr('string'),
    note: DS.attr('string')
});


App.Envelope = DS.Model.extend({
    mail: DS.hasMany('mail') // use DS.belongsTo('mail') if 1-1 relationship

    color: DS.attr('string'),
    weight: DS.attr('string'),
    name: DS.attr('string')

});

belongsTo将是子记录所属父级的id。 hasMany将是父拥有的子记录数组。

您还需要设置一个名为“信封”的属性。在你的控制器中,你已经创建了一个计算属性,或者作为其他一些范围的一部分访问它(例如计算别名)

然后您可以通过

访问该笔记
//assumes 1-1 relationship
{{#each envelope in envelopes}}
    {{envelope.mail.note}}
{{/each}}

//of if an envelope has many mails
{{#each envelope in envelopes}}
    {{#each mail in envelope.mails}}
        {{envelope.mail.note}}
    {{/each}}
{{/each}}

一些可能有用的链接

belongsTo API spec

hasMany API spec

really great guide that helped me increase my understanding of ember-data