我有一个名为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。
答案 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];