Javascript 如何使集合只包含持久化的余烬数据记录,而不包括存在于客户端且未持久化的记录?

Javascript 如何使集合只包含持久化的余烬数据记录,而不包括存在于客户端且未持久化的记录?,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,假设后端有3个用户: let users = this.get('store').findAll('user'); console.log(users.get('length'));// => 3, e.g. [{id: 1}, {id: 2}, {id: 3}] this.get('store').createRecord('user'); console.log(users.get('length')); // => 4, e.g. [{id: 1}, {id: 2}, {i

假设后端有3个用户:

let users = this.get('store').findAll('user'); 
console.log(users.get('length'));// => 3, e.g. [{id: 1}, {id: 2}, {id: 3}] 
this.get('store').createRecord('user');
console.log(users.get('length')); // => 4, e.g. [{id: 1}, {id: 2}, {id: 3}, **{id: null}**]   
如何检索仅持久化记录的列表,即仅检索分配了ID的记录

我意识到,每当我需要使用持久化用户时,我可以手动筛选没有ID的记录,但这看起来既混乱又违反直觉。
最重要的是,使用手动方法时,我无法保留对集合的一个引用,就像我在
users
变量中所做的那样,这意味着集合无法计算,不会使用新记录进行更新等。
我浏览了恩伯的文档,但没有发现任何有用的东西,我是不是遗漏了什么?

如何仅从余烬的
存储中获取持久化记录的集合?

您可以通过
isNew
属性进行筛选

   let users = this.get('store').findAll('user').then(function(result){
     return result.filterBy('isNew', false);
    });

这是我的解决方案,灵感来自kumkanillam的
filterBy
示例,区别在于我的方法利用了Ember的计算属性,这意味着它与Ember数据记录的添加同步,这是我主要关心的。
该代码被提取为一种实用方法,可轻松插入。
utils/only persistend.js

import Ember from 'ember';

export default function (modelName) {
    return Ember.computed(`${modelName}.@each.isNew`, function () {
        return this.get(modelName).filterBy('isNew', false);
    });
};
在控制器中:

import Ember from 'ember';
import onlyPersisted from 'utils/only-persisted';

export default Ember.Controller.extend({
    users: onlyPersisted('model')
});