在不进行HTTP调用的情况下更新Ember Data中的特定记录?

时间:2015-11-04 14:57:04

标签: javascript ember.js

我有一个名为emails的Ember.js模型。这就是文件的样子:

import DS from 'ember-data';

export default DS.Model.extend({
    label   : DS.attr('string'),
    primary : DS.attr('string'),
    email   : DS.attr('string')
});

我从服务器获取结果并通过执行以下操作来推送数据:

this.store.createRecord('emails', {
    label: 'Foo',
    primary: true,
    email: foo@bar.com
});

我有一个允许用户向商店添加新电子邮件的表单。一旦他们添加了新的,我将使用上面的代码将其推送到商店。

商店中只能有一条记录,密钥为primary' set to true。当用户添加新的主电子邮件时,我需要手动将任何现有的主电子邮件编辑为false,然后才添加新的电子邮件记录。

我尝试过像this.store.peekAll('emails')那样解析它,但我似乎无法理解如何仅获取primary: true的记录并更新它。我怎么能做到这一点?

请记住,我没有使用REST适配器,所以我不能像这样查询Ember数据:http://guides.emberjs.com/v1.13.0/models/finding-records/#toc_querying-for-multiple-records

2 个答案:

答案 0 :(得分:1)

您可以将Ember Data的peekAll和Ember.Enumerable方法findBy结合起来获取记录:

var primary = this.store.peekAll('email').findBy('primary', true);

答案 1 :(得分:0)

您可能希望过滤该属性的电子邮件列表:

emails = this.store.peekAll('email');
primaryEmails = emails.filter(function(email){
    return email.get('primary') === true;
  });
//because filter will return an array, hopefully of length 1:
primaryEmail = primaryEmails[0];