如何才能拥有仅包含持久化Ember数据记录的集合,不包括存在于客户端且不持久存储的记录?

时间:2016-12-16 22:59:41

标签: 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}, {id: 3}, **{id: null}**]   

如何检索持久记录的列表,即只有分配了ID的记录?

我意识到每当我需要使用持久用户时,我都可以手动过滤没有ID的记录,但这看起来很乱并且违反直觉。
最重要的是,通过手动方法,我无法对集合进行一次引用,就像我在users变量中所做的那样,意味着集合无法计算,不会更新有新记录等。
我浏览了Ember的文档,但我发现没有任何用处,我错过了什么吗? 我怎样才能从Ember' store获得一组持久性记录?

2 个答案:

答案 0 :(得分:1)

您可以过滤isNew属性。

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

答案 1 :(得分:0)

这是我的解决方案,灵感来自kumkanillam的filterBy示例,不同之处在于我的方法使用了Ember的计算属性,这意味着它与Ember数据记录的添加同步,这是我的主要关注。
代码被提取为一种易于插入的实用方法 utils/only-persisted.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')
});