2016-12-16 6 views
1

Предполагая, что у меня есть 3 пользователей в интерфейсе:Как я могу создать коллекцию, содержащую только сохраненные записи Ember Data, за исключением записей, которые живут на стороне клиента и не сохраняются?

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}**] 

Как я могу получить список только сохранились записи, то есть только те записи, которые имеют идентификатор, назначенный для них?

Я понимаю, что могу вручную фильтровать записи, которые не имеют идентификатора, когда мне нужно потреблять постоянных пользователей, но это выглядит грязным и противоречивым.
Самое главное, что с помощью ручного подхода я не могу сохранить одну ссылку на коллекцию, как то, что у меня было в переменной users, то есть сбор не может быть вычислен, не обновляется новыми записями и т. Д.
Я просмотрел документы Эмбера, но я не нашел ничего полезного, я что-то пропустил?
Как я могу получить только коллекцию сохраненных записей от Ember's store?

ответ

1

Вы можете filterBy isNew property.

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

Вот мое решение, вдохновленный filterBy например kumkanillam, отличие заключается в том, что мой подход использует вычисляемые свойства Ember, а это означает его синхронизируется с дополнениями к записям Ember данных, которая была моей главной заботой.
Код извлекается как удобный метод, который можно легко подключить.
utils/only-persisted.js:

import Ember from 'ember'; 

export default function (modelName) { 
    return Ember.computed(`${modelName}[email protected]`, 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') 
});