假设后端有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
获得一组持久性记录?
答案 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')
});